【问题标题】:Rails form_for with checkboxes, assign values to array-type variable带有复选框的Rails form_for,将值分配给数组类型变量
【发布时间】:2014-10-26 08:13:09
【问题描述】:

Rails 4.1.4,Ruby 2.1.2。 Postgres。

我有一个具有roles 属性的用户模型。角色属性是一个 postgres 数组类型。我正在尝试创建一个带有不同角色选项复选框的表单,用户可以选择他们适合的角色。如果他们选择了“导演”复选框,他们的roles 属性,现在你应该看到:

@user.roles = ['director'].

我正在尝试使用 form_for,但也许这是不可能的。

有人知道怎么做吗?

form_for(@user) do |f|
    f.check_box :roles ...?

【问题讨论】:

标签: ruby-on-rails ruby forms postgresql checkbox


【解决方案1】:

你可以试试这个

 form_for(@user) do |f|
   f.collection_check_boxes(:roles, @user.roles, :id, :labeling_method )

更多细节

http://apidock.com/rails/v4.0.2/ActionView/Helpers/FormOptionsHelper/collection_check_boxes

【讨论】:

  • 好像漏掉了第三个参数,应该是所有角色的集合对象。
  • 不,我做了@user.roles ...它是表单对象......所以正如你所说的collection_check_boxes(:post, :author_ids, Author.all, :id, :name_with_initial)但这里form_for与表单对象f所以f.collection_check_boxes :author_ids, Author.all, :id, :name_with_initial参考edgeapi.rubyonrails.org/classes/ActionView/Helpers/…
  • 好的!我错了。但仍然建议使用一些其他角色集合而不是@user.roles。不会为新用户显示复选框。
  • 谢谢你的建议是的应该很好是的我可以但是请看他已经使用的问题@user.roles我认为他会更好地理解
【解决方案2】:
form_for(@user) do |f|
  f.check_box :roles, User::ROLES #assuming you have a constant ROLES holding your roles.

因评论而编辑

【讨论】:

  • 我将如何处理非活动记录对象的角色?它们只是字符串(即,如果选中该复选框,我只想将字符串“director”或“admin”添加到角色数组中)。我想我不明白如何设置一个响应 :id 方法的 User::ROLES 常量。
  • 您希望在 :role 属性中保留几个角色,对吗?你可以做 f.check_box :roles, User::ROLES, {multiple: true }
  • Rails 错误:wrong number of arguments (2 for 4..6)。不,只是数组中的字符串。
  • 用户模型中有这个 ROLES 常量吗?
  • 可能是@user.roles
【解决方案3】:

假设您的用户中有一些字符串常量

<%= form.collection_check_boxes(:roles, USER::ROLES_STRINGS[access_if_you_need_from_this_constant_but_we_need_an_array_here].keys, :to_s, Proc.new{|l| USER::ROLE_STRINGS[access_if_you_need_from_this_constant_but_we_need_an_array_here][l]}) %>

应该根据你的结构工作/让你接近!

【讨论】:

    猜你喜欢
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多