1

有没有办法使用一个命令来检索所有行并过滤它们?

所以,现在我有条件逻辑

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

有没有减少代码行的技巧,理想情况下是一个?=)

4

2 回答 2

1

我认为您可以使用 hash 的拒绝功能尝试这种方式

    @movies = Movie.find(:all, :conditions => {:rating => rating_filter, :date => date_filter}.reject{|k, v| !v})
于 2013-10-27T15:10:35.473 回答
1

或者,您可以使用has_scope gem。

它有助于使您的控制器保持清晰和简洁。

于 2013-10-27T17:09:47.357 回答