新手问题 select 怎么实现多个 vaule 对应一个 option

tt12580-github · 2017年04月14日 · 最后由 tt12580-github 回复于 2017年04月14日 · 2097 次阅读
<%= 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"=>"查询"}

应该是被:options_for_select 方法给:to_s 了😋 ,你可以试试 ['xxx', 'xxx,xxx'],然后后台进行 split(',')

winse 回复

那该咋解决。。

group_options_for_select 不知道是不是你的意思

Catherine 回复

应该是 grouped_options_for_select 吧,但不是这个意思。我想点击“未退款”,显示出 ['shipped', 'apply_refunded'] 这两个状态的数据

tt12580-github 回复

哦,那就像 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 了

tt12580-github 回复

写个 js 控制,那个 options 值为 A、B 的时候 value 等于未退款、已付款

<%= 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 为shippedapply_refunded的选项选中。假如你想让 helper 来生成的话,建议不要使用数组来作为 value,否则只能用 js 来操作了。

试了楼上的几个方法,页面还是要用 js 控制

需要 登录 后方可回复, 如果你还没有账号请 注册新账号