<%= select_tag :state, options_for_select([['未退款', ['shipped', 'apply_refunded']], ["已退款", 'refunded']], params[:state]), include_blank: true, class: 'form-control' %>
上面代码在 log 中变这样了 什么原因
Parameters: {"utf8"=>"✓", "start_time"=>"2017-04-08", "stop_time"=>"2017-04-14", "state"=>"[\"shipped\", \"apply_refunded\"]", "customer"=>"", "uuid"=>"", "commit"=>"查询"}
应该是 grouped_options_for_select 吧,但不是这个意思。我想点击“未退款”,显示出 ['shipped', 'apply_refunded'] 这两个状态的数据
哦,那就像 1 楼说的,直接用 select ['未退款', 'shipped,apply_refunded'],然后在那个动作里 split(','),就分别得到那两个值了么。
从 log 看 state 的值被转成字符串了,看上去是 json 字符串,你可以在 controller 转成数组
JSON.parse(params[:state])
def index
if params[:state] == "[\"shipped\", \"apply_refunded\"]"
params[:state] = ['shipped', 'apply_refunded']
end
@apply_refunds = current_merchant_info.refund_apply_records
.find_customer(params[:customer])
.find_uuid(params[:uuid])
.find_order_state(params[:state])
.find_start_time(params[:start_time])
.find_stop_time(params[:stop_time])
.order(created_at: "DESC")
.page(params[:page]).per(20)
end
我在 controller 里加了这个处理,数据能筛选了,但页面 select 不能选中“未退款”这个 option 了
<%= select_tag :state, options_for_select([['未退款', 'shipped,apply_refunded']], ["已退款", 'refunded']], params[:state]), include_blank: true, class: 'form-control' %>
controller
def index
params['state'] = params['state'].split(',') if params['state'].present?
个人觉得这样好些
稍微看了一下options_for_select的源码,如果你第二个参数传数组的话其实是变成将 value 为shipped或apply_refunded的选项选中。假如你想让 helper 来生成的话,建议不要使用数组来作为 value,否则只能用 js 来操作了。