Question

link_to 'articles', articles_path, :attr1 => 'foo', :attr2 => 'bar' 

Et dans le contrôleur:

Article.find_all_by_attr1_and_attr2(params[:attr1], params[:attr2])

Toutefois, si le contrôleur reçoit [:attr1] que je reçois un nul.

Était-ce utile?

La solution

Finders dynamique ne peut pas être la bonne façon d'aller si certains viseurs ne sont pas réellement présents. Dans ce cas, vous êtes probablement mieux d'utiliser Article.find(:all, :conditions => {}) on Rails 2 et Article.where() on Rails 3.

Voici une méthode que je suis venu avec un autre une question en retour:

conditions = [:attr1, :attr2].inject({}) do |hsh, field|
  hsh[field] = params[field] if params[field] && params[field].present?
  hsh
end

# Rails 2
@articles = Article.find(:all, :conditions => conditions)

# Rails 3
@articles = Article.where(conditions)

Dans le cas ci-dessus, vous feriez boucle sur tous les champs du tableau, et ajouter chacun d'entre eux au hachage si elle est et non vide dans params. Ensuite, vous passez le hachage du viseur, et tout va bien et dandy.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top