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

そしてコントローラーで:

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

ただし、コントローラーが受信するだけの場合は[:attr1]、nilを取得します。

4

1 に答える 1

2

一部のファインダーが実際に存在しない場合、動的ファインダーは適切な方法ではない可能性があります。Article.find(:all, :conditions => {})この場合、 Rails2とRails3で使用したほうがよいでしょうArticle.where()

これが私がしばらく前に別の質問のために思いついた方法です:

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)

上記の場合、配列内のすべてのフィールドをループし、で空でない場合は、結果のハッシュに各フィールドを追加しparamsます。次に、ハッシュをファインダーに渡すと、すべてが正常でダンディになります。

于 2011-01-21T00:10:00.557 に答える