Ruby on Rails:嵌套模型表格复选框用于'has_many:通过'关系

时间:2014-02-25 19:03:01

标签: ruby-on-rails ruby has-many-through form-for fields-for

对于RoR来说还是比较新的,更不用说Ruby了。 这是我的问题。我正在使用Rails 4和Ruby 2.1.0

我有一个具有这种关系的User类:

has_many :roles, ->{ uniq }, :through => :user_roles
accepts_nested_attributes_for :roles

现在,表'角色'只有一个角色列表,例如'admin','moderator','visitor','artist'等。

表'user_roles'只是一个关系表,包含角色的密钥和用户密钥。

因此,澄清一下,'用户'与'user_roles'有一对多的关系,而'user_roles'表与'roles'表有多对一的关系。

这样的事情:

users: id, name, email #ie: 12, 'mikey', 'mike@foobar.com'
user_roles: id, user_id, role_id #ie: 4324, 12, 8
roles: id, name, weight #ie: 8, 'moderator', 11

我已经完成了在管理部分添加复选框切换的任务,以便管理员可以将管理员角色授予任何一个用户。

每个管理页面适用于一个特定用户。因此,form_for基于@user实例,具体取决于管理员选择进行编辑的用户。

RailsCasts#196有点帮助我理解这个概念,但它的平台差异很大,我不确定如何将其完全转化为我需要的东西。同样,StackOverflow上也有一些类似的问题 - 但同样,我似乎无法将其正确地转换为我的情况。

我所拥有的,我认为应该至少在正确方向的某个地方。再说一遍,也许我离开了。这是我的表单代码:

= form_for @user, :url => admin_user_path(@user), html:{class: 'form_horizontal'} do |f|
  %br
  %h4{class: :dc_green}Logistical Information
  = f.label :display_name, "Display Name"
  = f.text_field :display_name
  = f.label :email, "eMail"
  = f.text_field :email
  %br

  = f.fields_for :roles do |a|
    = a.check_box :moderator, { inline_label: :none }
    = a.label :moderator, {for: :moderator, class: "checkbox inline"}
    %br

我在这个表单代码中遇到的错误是:undefined method` moderator'

提前感谢能够提供支持的任何人:)

我想我应该补充说,一旦提交,我对如何在控制器中处理这个问题也毫无头绪。但是,首先要做的事情。

UPDATE 所以,我得到未定义错误的原因是因为该用户不存在。这很糟糕。我需要能够将角色添加到用户或删除角色。但是,唯一的角色是用户已被分配到的角色。所以我完全做错了。现在我真的在黑暗中。

0 个答案:

没有答案