The Troll's factory

Geekeries & pensées
-->

Astuces Ruby / Rails

Connaître toutes les clés disponibles dans les en-têtes et dans les variables d’environnement (pratique quand on a oublié le nom d’une clé) :

Note : fonction non récursive, se limite à un tableau bidimmensionnel

def parcourir (variable)
variable.each do |key,val|
if val.is_a? Array
val.each do |key2,val2|
@content += '&nbsp;&nbsp;<br />' + key2.to_s + ' -> ' + val2.to_s
end
else
@content += "<br />" + key.to_s + ' -> ' + val.to_s
end
end
end
parcourir request.env
@content += '<hr />'
parcourir request.headers

Comment récupérer la dernière page qui a été consultée par l’utilisateur, sans utiliser les REFERER et surtout en prenant en compte les redirection (ce qui ne marche pas avec les referers) :

  before_filter :save_referer
  before_filter # all other before_filters have to be placed after the save_referer !


  private
  def save_referer
    if request.env['HTTP_REFERER'] && !request.env['HTTP_REFERER'].blank?
      session[:referer] = request.env['HTTP_REFERER']
    else
      session[:referer] = session[:new_referer] || ''
    end
    session[:new_referer] = request.env['REQUEST_URI']
  end

Vérifier qu’une string ne correspond PAS à une regex donnée :

if string !~ %r{maregex}flags
flags sont les drapeaux (i, s…)
On peut aussi remplacer %r{..} par /../ à sa convenance…

Les has_and_belongs_to_many (HABTM) multiples

Il semblerait qu’il ne soit pas possible d’en spécifier plusieurs par ligne, si on fait :

has_and_belongs_to_many :model1, :model2

Il cherche à utiliser « model2″ en tant que clé de liaison avec « model1″

Il faut donc faire :

has_and_belongs_to_many :model1
has_and_belongs_to_many :model2

Valider l’unicité d’une clé mixte (clé à plusieurs champs, « clé multiple »

Il semblerait que ce ne soit pas possible avec rails par défaut, à la place on valide une clé par rapport à un environnement fixé.

Cela se traduit par l’écriture suivante, pour une clé (field1, field2, field3) :

validates_uniqueness_of :field1, :scope => [:field2, :field3]

Mettre au pluriel :

La méthode est plurialize

Exemple :

> "mouse".pluralize
=> "mice"

Les irrégularités gérées par défaut sont assez incomplètes mais vous pouvez les améliorer en configurant je sais plus quoi :

> "tooth".pluralize
=> "tooths"

Share and Enjoy:
  • Print
  • PDF
  • Twitter
  • Facebook
  • LinkedIn
  • RSS
  • Wikio FR
  • Digg
  • del.icio.us
  • Google Bookmarks
  • Technorati
  • Sphinn
  • Mixx
  • Add to favorites
  • Live
  • Netvibes
  • Scoopeo
  • viadeo FR
  • Identi.ca
  • MySpace
  • StumbleUpon
  • Yahoo! Buzz

Poster un commentaire

Remplissez le formulaire suivant pour poster un message.
Nom
Email
Site internet
Votre commentaire