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

在控制器中:

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

但是,如果控制器只收到[:attr1]我会得到零。

4

1 回答 1

2

如果某些查找器实际上不存在,则动态查找器可能不是正确的方法。在这种情况下,您最好Article.find(:all, :conditions => {})在 Rails 2 和Article.where()Rails 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)

在上述情况下,您将遍历数组中的所有字段,并将它们中的每一个添加到生成的哈希中(如果它在 in 并且不为空)params。然后,您将哈希传递给查找器,一切都很好。

于 2011-01-21T00:10:00.557 回答