【问题标题】:Ruby on Rails 4 select multipleRuby on Rails 4 选择多个
【发布时间】:2014-04-23 19:25:33
【问题描述】:

我有一个创建新用户的表单。我正在尝试添加一个下拉选项来选择权限级别。我希望能够为每个用户选择多个权限级别。

这是我的看法,我加了{:multiple => true}

<%= f.label :permission, "Permission Level" %>
<%= f.select :permission, [ ["Read Only", "read"], ["IP Voice Telephony", "ip_voice"], ["IP Video Telephony", "ip_video_telephony"], ["Enterprise Gateways", "enterprise_gateways"], ["Consumer ATAs", "consumer_atas"], ["IP PBX", "ip_pbx"], ["Master of All", "all"] ], {prompt: "Select Permission Level"}, {:multiple => true}, class: "input-lg" %>

我的控制器,我添加了:permission =&gt; []

def user_params
  params.require(:user).permit(:name, :email, :password, :password_confirmation, :admin, :permission => [])
end

我的视图出现的错误 f.select:

wrong number of arguments (5 for 2..4)

如何为 Rails 4 选择多重选择?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4


    【解决方案1】:

    classmultiple 都是 html_options 的一部分,因此它们应该放在一个哈希中。

    改变

    <%= f.select :permission, [ ["Read Only", "read"], ["IP Voice Telephony", "ip_voice"], ["IP Video Telephony", "ip_video_telephony"], ["Enterprise Gateways", "enterprise_gateways"], ["Consumer ATAs", "consumer_atas"], ["IP PBX", "ip_pbx"], ["Master of All", "all"] ], {prompt: "Select Permission Level"},
    {:multiple => true}, class: "input-lg" %>
    

    <%= f.select :permission, [ ["Read Only", "read"], ["IP Voice Telephony", "ip_voice"], ["IP Video Telephony", "ip_video_telephony"], ["Enterprise Gateways", "enterprise_gateways"], ["Consumer ATAs", "consumer_atas"], ["IP PBX", "ip_pbx"], ["Master of All", "all"] ], {prompt: "Select Permission Level"},
    {:multiple => true, class: "input-lg"} %>
    

    现在您分别传递它们。因此,select 方法的参数计数在应该为 4 时变为 5。因此,错误。

    【讨论】:

    【解决方案2】:

    您的 :class 选项不在 html_options 的哈希中:

    {:multiple => true}, class: "input-lg"
    

    应该是

    {:multiple => true, class: "input-lg"}
    

    【讨论】:

    • 当您在表单构建器中使用帮助器时会有点混乱,因为它们比非包装版本少一个选项,因为表单构建器本身提供了对象。
    【解决方案3】:

    到目前为止我还没有对其进行测试,但是错误消息非常简单,您正在尝试使用 5 个参数来使用 #select 方法,并且它最多接受 4 个参数,阅读 API 似乎您应该提供'class' 属性在您提供的 'multiple' 相同的哈希中,因为它们都是 html_options。

    尝试像这样使用它:

    <%= f.select :permission,
                 [ ["Read Only", "read"],
                   ["IP Voice Telephony", "ip_voice"],
                   ["IP Video Telephony", "ip_video_telephony"],
                   ["Enterprise Gateways", "enterprise_gateways"],
                   ["Consumer ATAs", "consumer_atas"],
                   ["IP PBX", "ip_pbx"],
                   ["Master of All", "all"] ],
                 {prompt: "Select Permission Level"},
                 {multiple: true, class: "input-lg"} %>
    

    将权限数组解耦到另一个地方也很好。也许它会有助于维护。

    http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-select

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2010-11-04
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      相关资源
      最近更新 更多