当属性出现时,如何避免使用动态发现器零?
-
15-10-2019 - |
题
link_to 'articles', articles_path, :attr1 => 'foo', :attr2 => 'bar'
在控制器中:
Article.find_all_by_attr1_and_attr2(params[:attr1], params[:attr2])
但是,如果控制器仅接收 [:attr1]
我得到一个零。
解决方案
如果某些发现者实际上没有存在,动态发现者可能不是正确的方法。在这种情况下,最好使用 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
. 。然后,您将哈希传递给发现者,一切都很好,花花公子。
不隶属于 StackOverflow