Wie vermeide ich NIL mit einem dynamischen Finder, wenn ein Attribut als Null ist?
-
15-10-2019 - |
Frage
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 Controller jedoch nur erhält [:attr1]
Ich bekomme einen Null.
Lösung
Dynamische Finder sind möglicherweise nicht der richtige Weg, wenn einige Finder nicht tatsächlich vorhanden sind. In diesem Fall sind Sie wahrscheinlich besser dran, Article.find(:all, :conditions => {})
auf Schienen 2 und Article.where()
auf Schienen 3.
Hier ist eine Methode, die ich vor einiger Zeit für eine weitere 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 haben Sie alle Felder im Array überschreiten und jeden von ihnen dem resultierenden Hash hinzugefügt, wenn es in und nicht leer ist params
. Dann übergeben Sie den Hash an den Finder und alles ist in Ordnung und Dandy.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow