如何按多个字段过滤结果?

had*_*ees 2 filtering named-scope ruby-on-rails filter

我正在使用ruby on rails和结果页面上的调查应用程序,我想让用户通过我在调查开始时提出的一系列人口统计问题来过滤答案.

例如,我问用户他们的性别和职业是什么.所以我在想性别和职业的下拉.两个下拉菜单都会默认为全部,但如果用户选择了女性和营销人员,那么我的结果页面只会给女性营销人员提供答案.

我认为这样做的正确方法是使用named_scopes,我的每个人口统计学问题都有一个named_scope,在本例中为性别和职业,这将从下拉列表中获取一个消毒值,以便在条件下使用我不确定如何动态创建named_scope链,因为我有5个人口统计学问题,并且可能其中一些将被设置为全部.

Jas*_*red 7

您可以将命名范围链接在一起:

def index
  @results = Results.scoped
  @results = @results.gender(params[:gender]) unless params[:gender].blank?
  @results = @results.career(params[:career]) unless params[:career].blank?
end
Run Code Online (Sandbox Code Playgroud)

但我更喜欢使用has_scope gem:

has_scope :gender
has_scope :career

def index
  @results = apply_scopes(Results).all
end
Run Code Online (Sandbox Code Playgroud)

如果将has_scopeinherited_resources 一起使用,则甚至不需要定义索引操作.