【问题标题】:Pass more than one value using Rails select_tag使用 Rails select_tag 传递多个值
【发布时间】:2015-03-23 19:03:58
【问题描述】:

我正在使用 rails form_tag 助手,其中 select_tag 用于表单内的下拉菜单。对于下拉列表中的给定选项,我需要能够传递 3 个值。是否可以使用 select_tag 做到这一点?

用于填充下拉列表的数据被格式化为哈希数组,下面是数组中给定项目的格式示例。

{ name: page['name'], page_id: page['id'], access_token: page['access_token'] }

所以在提交表单后,我想在我的控制器中获取这些值中的每一个作为参数。

使用 select_tag 的表单

<%= form_tag '/facebook_credentials' do %>
  <%= select_tag(:option, options_for_select(session['facebook_pages'].collect { |x| [x[:name] ] }) ) %>
  <%= submit_tag 'Save', class: 'button expand' %>
<% end %>

默认情况下,select_tag 只允许一个值,是否有解决此问题或更有效的方法来实现我正在寻找的结果?

【问题讨论】:

    标签: ruby-on-rails forms drop-down-menu


    【解决方案1】:

    您可以通过获取刚刚选择名称的哈希来找到“哈希的其他值”:

    # view
    select_tag(:option, options_for_select(session['facebook_pages'].collect { |x| [x[:name] ] })
    
    # controller's action (where you submit your form)
    selected_hash = session['facebook_pages'].find{ |x| x[:name] == params[:option] }
    

    此代码依赖于 select_tag 选项中的每个哈希值都有一个唯一的 :name

    【讨论】:

    • 我喜欢这个解决方案,谢谢。
    【解决方案2】:

    根据ruby on rails f.select options with custom attributes有两种方式:

    1) 将您的值存储在每个 option 中作为数据属性。在您的选择标签上创建一个事件侦听器,它将根据选项数据属性和值添加具有正确名称的隐藏输入。这些隐藏的输入数据将被发送到服务器。

    2) 将option 值与您的数据组合在一起的特定格式,然后在服务器上解析它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多