link_to 'articles', articles_path, :attr1 => 'foo', :attr2 => 'bar'
Und im Controller:
Article.find_all_by_attr1_and_attr2(params[:attr1], params[:attr2])
Wenn der Kontrolleur jedoch nur [:attr1]
Ich bekomme eine Null.
link_to 'articles', articles_path, :attr1 => 'foo', :attr2 => 'bar'
Und im Controller:
Article.find_all_by_attr1_and_attr2(params[:attr1], params[:attr2])
Wenn der Kontrolleur jedoch nur [:attr1]
Ich bekomme eine Null.
Dynamische Finder sind möglicherweise nicht der richtige Weg, wenn einige der Finder gar nicht vorhanden sind. In diesem Fall sind Sie wahrscheinlich besser dran, wenn Sie Article.find(:all, :conditions => {})
auf Rails 2 und Article.where()
auf Rails 3.
Hier ist eine Methode, die ich vor einiger Zeit für eine andere Frage entwickelt habe:
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)
Im obigen Fall würden Sie eine Schleife über alle Felder im Array machen und jedes von ihnen zum resultierenden Hash hinzufügen, wenn es in und nicht leer ist in params
. Dann geben Sie den Hash an den Finder weiter, und alles ist in Ordnung.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.