【发布时间】:2016-07-08 09:51:57
【问题描述】:
我正在尝试按多个字段进行过滤。这些字段取自 ENUM 列表并放入复选框字段中,然后保存到数组中。我要过滤的 GET 请求如下所示:{"statuses" => ["active", "past_due"]}。我有一个查询范围,它应该按所选值进行过滤。我假设问题出在模型中。
型号:
scope :subscription_status, -> (statuses) {where :subscription_status => statuses}
控制器:
@users = User.where(nil)
@users = @users.subscription_status(params[:statuses]) if params[:statuses].present?
视图(html.haml):
= form_tag root_path, :method => 'get' do
- @subscription_statuses.each do |status|
= check_box_tag 'statuses[]', status
= status
= submit_tag "Filter", :name => nil
@subscription_statuses 包含 ENUM 列表。
我的其他过滤器的工作原理相同,但这个似乎不起作用。页面重新加载,发送 GET 参数,但没有过滤。
提前谢谢你。 :)
编辑:
@subscription_statuses = User.subscription_statuses.keys
这是一个字符串数组,数据库中的值保存为字符串。
【问题讨论】:
-
您能否通过使用
.to_sql为调用添加后缀来输出您的代码生成的SQL 查询...例如:User.where(id: [1,2,3]).to_sql -
我不知道我是否理解你的问题,但这是我生成的: User.where(:subscription_status => ["trialing", "past_due"]).to_sql "SELECT @ 987654327@.* FROM
usersWHEREusers.subscription_statusIN (0, 0)"。你是对的,这里有一个问题,但我不知道为什么会这样翻译。如果我尝试在查询中输入 [1,2] 而不是“状态”,它不会显示任何内容,因为值保存为字符串...
标签: ruby-on-rails ruby-on-rails-4 search model-view-controller