有没有一种方法可以使用一个命令来检索所有行并对其进行过滤?
所以,现在我有了条件逻辑
if rating_filter.nil?
@movies = Movie.all
else
@movies = Movie.find(:all, :conditions => {:rating => rating_filter})
end
也就是说,如果未设置用于字段的过滤器,则我不想按此字段进行过滤,但是如果将nil传递给第二个命令,则会得到:
SELECT * FROM movies WHERE rating is NULL, though I need
SELECT * FROM movies
如果我有多个参数,就会出现问题。如果两者都设置,那么没问题:
@movies = Movie.find(:all, :conditions => {:rating => rating_filter, :date => date_filter})
但是如果未设置一个过滤器,则需要分支我的逻辑以获取单独的命令:
if ..
@movies = Movie.find(:all, :conditions => {:rating => rating_filter)
else
@movies = Movie.find(:all, :conditions => {:date => date_filter})
else
@movies = Movie.all
end
有一种技巧可以减少代码行,理想情况下可以减少一行吗?=)
我认为您可以使用hash的拒绝功能尝试这种方式
@movies = Movie.find(:all, :conditions => {:rating => rating_filter, :date => date_filter}.reject{|k, v| !v})
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句