Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 当属性为nil时,如何使用动态查找器避免nil?_Ruby On Rails_Activerecord_Dynamic Finders - Fatal编程技术网

Ruby on rails 当属性为nil时,如何使用动态查找器避免nil?

Ruby on rails 当属性为nil时,如何使用动态查找器避免nil?,ruby-on-rails,activerecord,dynamic-finders,Ruby On Rails,Activerecord,Dynamic Finders,在控制器中: link_to 'articles', articles_path, :attr1 => 'foo', :attr2 => 'bar' 但是,如果控制器只接收到[:attr1]我会得到一个零。如果某些查找程序实际上不存在,那么动态查找程序可能不是正确的方法。在这种情况下,最好在Rails 2上使用Article.find(:all,:conditions=>{}),在Rails 3上使用Article.where() 这是我前一段时间提出的另一个问题的方法: Art

在控制器中:

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

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

如果某些查找程序实际上不存在,那么动态查找程序可能不是正确的方法。在这种情况下,最好在Rails 2上使用
Article.find(:all,:conditions=>{})
,在Rails 3上使用
Article.where()

这是我前一段时间提出的另一个问题的方法:

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

在上面的例子中,您将循环数组中的所有字段,并将它们中的每一个添加到结果哈希中(如果它在
params
中且不是空的话)。然后,你把散列传递给查找器,一切都很好。

如果是这样,你会怎么做?没有足够的信息来有效地回答这个问题。
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)