Ruby on rails RubyonRails:A';有很多:通过';关系

Ruby on rails RubyonRails:A';有很多:通过';关系,ruby-on-rails,ruby,has-many-through,form-for,fields-for,Ruby On Rails,Ruby,Has Many Through,Form For,Fields For,对RoR来说还是相当陌生的,更不用说Ruby本身了。 这是我的问题。我正在使用Rails 4和Ruby 2.1.0 我有一个具有此关系的用户类: has_many :roles, ->{ uniq }, :through => :user_roles accepts_nested_attributes_for :roles 现在,表“角色”只是一个角色列表,如“管理员”、“版主”、“访问者”、“艺术家”等 表“user_roles”只是一个关系表,包含角色键和用户键 因此,为了澄清

对RoR来说还是相当陌生的,更不用说Ruby本身了。 这是我的问题。我正在使用Rails 4和Ruby 2.1.0

我有一个具有此关系的用户类:

has_many :roles, ->{ uniq }, :through => :user_roles
accepts_nested_attributes_for :roles
现在,表“角色”只是一个角色列表,如“管理员”、“版主”、“访问者”、“艺术家”等

表“user_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
我的任务是在管理部分添加一个复选框切换,这样管理员就可以将版主角色授予任何一个用户

每个管理员页面针对一个特定用户。因此,表单_基于@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
这个表单代码的错误是:未定义的方法'慢化剂'

提前感谢所有能够提供支持的人:)

我想我应该补充一点,我也不知道一旦它被提交,我应该如何在控制器中处理它

更新
因此,我得到未定义错误的原因是该用户不存在该错误。这很糟糕。我需要能够将角色添加到该用户或删除该角色。但是,唯一的角色是用户已经分配到的角色。所以我完全错了。现在我真的不知道了。

此代码不包括de
author
。堆栈跟踪是否指向您的控制器?我们可以看到该代码吗?
author
是什么,来自模型的属性,某个地方定义的方法?请多解释一点,或者,对不起,这是我刚刚测试的不同角色类型。如果我使用版主,它会说同样的话。未定义的方法`modera托尔