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.

War es hilfreich?

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
scroll top