Développement Web Ruby
par Sylvain CLAUDEL

Derniers posts

3 solutions gratuites de génération de graphiques coté client qui valent le coup !

Date d'édition 2012-12-11 à 16:08

Voici 3 solutions open-sources pour faire des graphiques coté client.

Morris.js (BSD): Basé sur D3.js 

GRaphaeljs (MIT) : Basé sur Raphaeljs

Elycharts (MIT) : Basé sur Raphaeljs

Ces solutions existent depuis un petit moment déjà et vous les connaissez sûrement. Ce post fait office de post-it pour moi :-)

2 tables de jointure différentes entre 2 mêmes models

Date d'édition 2012-10-17 à 14:28

Bon le titre est un peu capilo-tracté. L'explication qui va suivre presque tout autant.
Imaginons vous avez un model User et un model Book. On veut modéliser une relation "à participé à la rédaction de" et une relation "à lu". Dans ce cas des tables de jointure s'impose.
Pour une table de jointure pas de problème, on suit les conventions : (nom des models au pluriel triés par ordre alphabétique et séparés par "_"). Mais dans ce cas nous avons deux tables de jointure et nous ne voulons pas confondre les données. Voici comment procéder :
Créer les tables de jointure :
rails g migration join_table_users_books
Ouvrez le fichier générer et mettez-y la création des tables de jointure
def up
  create_table :reading, :id => false do |t|
    t.integer :user_id
    t.integer :book_id
  end
  add_index :reading, [:user_id, :book_id]
  create_table :writing, :id => false do |t|
    t.integer :user_id
    t.integer :book_id
  end
  add_index :writing, [:user_id, :book_id]
end
def down
  drop_table :reading
  drop_table :writing
end
Ensuite ajoutez les relations habtm dans les models :
class User < ActiveRecord::Base
  has_and_belongs_to_many :readed_books, :class_name => "Book", :join_table => "reading"
  has_and_belongs_to_many :written_books, :class_name => "Book", :join_table => "writing"
end
class Book < ActiveRecord::Base
  has_and_belongs_to_many :readed_by_users, :class_name => "User", :join_table => "reading"
  has_and_belongs_to_many :written_by_users, :class_name => "User", :join_table => "writing"
end
Vous pouvez maintenant faire :
User.first.readed_books
User.first.readed_book_ids
u = User.first
u.readed_books << Book.limit(3).all
u.save
Voilà il ne reste plus qu'à appliquer ceci dans votre cas.
 

Quelques ressources pour le Twitter Bootstrap

Date d'édition 2012-10-12 à 16:58

Voici quelques ressources sympa pour le Twitter Bootstrap.

https://fortawesome.github.com/Font-Awesome/ : font pour ajouter des icons au Twitter bootstrap

https://bootswatch.com/ : thème css pour le T. bootstrap

https://jetstrap.com/ : Builder d'inferface wysiwyg pour le bootstrap à la souris

Si vous en avez d'autres n'hésitez pas dans les commentaires.

Display:inline-block les espaces indésirables

Date d'édition 2012-10-05 à 16:14

Je faisais des tests d'intégrations et en travaillant au pixel près j'ai découvert le problème des espaces indésirables entre les éléments inline-block. 

En bidouillant sur chrome, je n'ai pas réussi à trouver d'où ça venait. En cherchant sur Google je suis tombé sur un article de Raphael Goetter (AlsacreationS) https://www.alsacreations.com/astuce/lire/1432-display-inline-block-espaces-indesirables.html. C'était également un problème dans le twitter bootstrap. Donc je choisis de mettre les éléments à la suite sans retour à la ligne (pas de bidouille css et économie de caractère). Cool ça marche, par contre un second problème : mon conteneur termine 4px environ en dessous du LastChild en display:inline-block. 

La solution a ce second problème entraîné par display:inline-block est de mettre un line-height à 0.

Générer un sitemap au déploiement pour une application rubyonrails

Date d'édition 2012-10-04 à 13:27

Il peut être intéressant de générer des sitemaps dans le cas où toutes les pages ne sont pas linkée (comprendre qu'elles n'ont pas de lien).

Le gem sitemap generator permet de faire cela. Il faut créer un fichier sitemap.rb dans config. Ce fichier a connaissance de l'environnement de rails (vous avez accès aux models).

Voici l'allure du fichier sitemap.rb (c'est un exemple avec le model Page) :

require 'rubygems'
require 'sitemap_generator'
SitemapGenerator::Sitemap.default_host = 'https://www.example.com'
SitemapGenerator::Sitemap.filename     = 'mon_sitemap'
SitemapGenerator::Sitemap.create do
  Page.all.each{ |page|
    add "/#{page.id}",
      :changefreq => 'monthly',
      :priority   => 0.4,
      :lastmod    => page.updated_at
  }
  add "/une_autre_page_statique", :changefreq => 'daily',  :priority => 0.7, :lastmod => 1.days.ago
end

Dans votre deploy.rb vous pouvez mettre ceci dans un before "deploy:create_symlink" do ... end

#sitemap
run "cd #{release_path} && RAILS_ENV=production rake sitemap:clean"
run "cd #{release_path} && RAILS_ENV=production rake sitemap:create"
# Optionnel permet de décompresser le gz 
#run "cd #{release_path}/public && gzip -d *.xml.gz"

Il faut aussi mettre ceci dans le Gemfile :

gem 'sitemap_generator'

Voir : https://github.com/kjvarga/sitemap_generator

Développement ruby et geekeries - rivsc