属性がnilとして来たときに、動的ファインダーでnilを避けるにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4753996

質問

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

コントローラーで:

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

ただし、コントローラーが受信する場合のみ [:attr1] 私はnilを手に入れます。

役に立ちましたか?

解決

一部のファインダーが実際に存在しない場合、ダイナミックファインダーは正しい方法ではないかもしれません。この場合、おそらく使用する方が良いでしょう Article.find(:all, :conditions => {}) Rails 2および Article.where() レール3。

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

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. 。次に、ハッシュをファインダーに渡し、すべてが元気でダンディです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top