Développeur Web RoR

Aller au contenu | Aller au menu | Aller à la recherche

mardi 9 août 2011

Will_paginate v3.0 pour rails 3.0 et rails 3.1 est sortie !

Grande nouvelle le gem will paginate pour la pagination des données dans rails 3 vient de sortir en version 3 ! Au menu plusieurs sortes de pagination : voir ici : http://mislav.uniqpath.com/will_paginate/ sinon voici le lien des sources du gem sur github : https://github.com/mislav/will_paginate/

lundi 11 juillet 2011

Ruby Enterprise Edition erreur certificate verify failed avec Open-uri

Si vous avez cette erreur et que vous faites un open sur une url en https (avec ruby Enterprise Edition ou ruby 1.8.7 parfois), rassurez-vous vous n'êtes pas seul :

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)

Voici une solution (bien crade soit-dit en passant, et de plus je me fiche de vérifier les certificats ici) :

- Créer un fichier dans config/initializers, je l'appelle bypass_ssl_verification_for_open_uri.rb

- On y mets OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE #<< C'est bien crade hein !

Voilà si vous avez une meilleur solution n'hésitez pas !

jeudi 7 juillet 2011

Mettre des headers personnalisés dans les requêtes des tests fonctionnels et d'intégration de rubyonrails

Il peut être intéressant de spécifier des headers personnalisés pour les requêtes des tests fonctionnels (functional test) et des tests d'intégration (integration test). J'ai cherché assez longtemps.

Voilà comment procéder pour les tests d'intégration :


post(:create, {:user => {:name => "Jack"}}, {"CUSTOM_HEADER" => "bar"})

Et comme ceci pour les tests fonctionnels :


@request.env["CUSTOM_HEADER"] = "bar"
post(:create, {:user => {:name => "Jack"}})

Sources : http://twobitlabs.com/2010/09/setting-request-headers-in-rails-functional-tests/ , http://guides.rubyonrails.org/testing.html#instance-variables-available

vendredi 24 juin 2011

RubyOnRails 3 ActiveRecord un cas d'utilisation d'has_many/belongs_to

Bon voici un bon cas bien complexe de relation à gérer avec rubyonrails 3 et ActiveRecord :

Le but est de représenter les relations familiales (family_relationship) de personne (contact).

 - Table contacts (qui représente un être humain avec ses coordonnées).

 - Table family_relationships (qui représente une relation entre deux êtres humains, lien de père, mère, frère, soeur), avec deux clés étrangères qui pointent vers contacts : master_id et slave_id et un champ type (integer : 1 : fils, 2 : fille, 3 : père, 4 : mère).

On lit la relation comme suit : Master a pour {père|mère|fils|fille} slave.

Nous voulons pouvoir faire :

contact.fathers 

=> [#<Contact id: 7.....>]

contact.mothers 

=> [#<Contact id: 9.....>]

contact.daughters 

=> [#<Contact id: 11.....>,  #<Contact id: 8......> ]

contact.sons 

=> [#<Contact id: 12.....>,  #<Contact id: 13......> ]

Ici on ne s'occupera pas de gérer la contrainte UN SEUL père et UNE SEULE mère.

Voici comment définir nos models :

Ici le model Contact

class Contact < ActiveRecord::Base
  has_many :family_relationship_as_masters, :foreign_key => "master_id", :class_name => "FamilyRelationship"
  has_many :family_relationship_as_slaves,  :foreign_key => "slave_id", :class_name => "FamilyRelationship"
  has_many :sons,      :through => :family_relationship_as_masters, :source => :slave, :conditions => ['"family_relationships"."type_relationship" = ?',1]
  has_many :daughters, :through => :family_relationship_as_masters, :source => :slave, :conditions => ['"family_relationships"."type_relationship" = ?',2]
  has_many :fathers,   :through => :family_relationship_as_masters, :source => :slave, :conditions => ['"family_relationships"."type_relationship" = ?',3]
  has_many :mothers,   :through => :family_relationship_as_masters, :source => :slave, :conditions => ['"family_relationships"."type_relationship" = ?',4]
end

Et là le model FamilyRelationship

class FamilyRelationship < ActiveRecord::Base
  belongs_to :master, :foreign_key => "master_id", :class_name => "Contact"
  belongs_to :slave, :foreign_key => "slave_id", :class_name => "Contact"
end

Je crois qu'il s'agit de la relation la plus compliquée que j'ai faite dans une application RubyOnRails (enfin qui utilise de plus d'options aux méthodes de jointure has_many et belongs_to en tout cas)

vendredi 10 juin 2011

Surcharger les accesseurs par défaut dans les models de rails3

Il peut être intéressant de surcharger des accesseurs, par exemple changer le comportement d'un attribut et éviter de changer tout son code.

Voici un petit exemple :

class Product < ActiveRecord::Base
  # setter,  ici ce code ne sert à rien, car le comportement 
  # par défaut est conservé, mais c'est pour l'exemple
  def name=(name)
    write_attribute(:name, name)
  end
  # getter, ici on ajoute " qui poutre" lors le l'appel du
  # nom du produit
  def name
    return read_attribute(:name) + " qui poutre"
  end
end

Avant la surcharge :

p = Product.new(:name => "Banania en poudre")

p.name # retourne "Banania en poudre"

Après la surcharge :

p = Product.new(:name => "Banania en poudre")

p.name # retourne "Banania en poudre qui poutre"

jeudi 24 février 2011

RubyOnRails 3.1 : Un lot de nouveautés bien sympatique

Voici quelques nouveautés croustillantes à propos de Rails 3.1  :

- Génération de sprites css automatique

- Partage de scope intermodel 

- Compilation de template erb js et css 

- "Auto Flushing" : envoie au navigateur de quoi traiter les css et js avant que la fin de la compilation de la vue (amélioration des performances)

J'ai hate de tester tout ça !

Source : http://hemju.com/2011/02/23/rails-3-1-release-rumors-and-news-about-features/

mercredi 23 février 2011

Jquery ujs : bug du link_to confirm dialog toujours executé

Avec le helper link_to vous avez la possibilité d'utiliser l'option :confirm => "Etes vous sur ?" qui permet d'afficher une belle boite de dialogue de confirmation (utilisé pour une suppression généralement). Et bien si vous avez le bug qui fait que quoique vous fassiez la requête se fait, c'est que vous n'avez pas la bonne version du connecteur jquery-ujs :

Pour Jquery 1.4 , jquery 1.4.1 , jquery 1.4.2 : https://github.com/rails/jquery-ujs/blob/v1.4/src/rails.js

Pour jquery 1.4.3 , jquery 1.4.4                     : http://github.com/rails/jquery-ujs/raw/master/src/rails.js

Là encore j'espère que ça peut aider !

- page 1 de 3