【问题标题】:How to access model nested attributes in controller?如何访问控制器中的模型嵌套属性?
【发布时间】:2013-06-26 15:26:14
【问题描述】:

我的模型中有以下关系:

  • security_user.rb
has_many :security_users_roles_to_users
has_many :security_users_roles, through: :security_users_roles_to_users
accepts_nested_attributes_for :security_users_roles
  • security_users_roles_to_users.rb

belongs_to :security_user
属于_to :security_users_role

  • security_users_roles.rb

has_many :security_users_roles_to_users
has_many :security_users,通过: :security_users_roles_to_users

目的是在用户和角色模型之间创建多对多关系。

创建新用户时,我想将其设置为默认角色(例如用户)。因此,在我的 security_users_controller.rb 中,在 create 操作中我有:

@security_user = SecurityUser.new(params[:security_user])
@security_user.security_users_roles.role = 'user'

但我收到以下错误:undefined method `role=' for ...

为什么我无法以上述方式访问属性?

注意:我没有传递来自用户角色的任何信息。

【问题讨论】:

    标签: ruby-on-rails-3 controller nested-attributes


    【解决方案1】:

    问题是@security_user.security_users_roles 是一个 ActiveRecord 关联,因此您不能在其上设置角色。

    试试类似的东西

    @security_user.security_users_roles_to_users.build(security_users_role: SecurityUsersRole.find_by_role('user'))
    

    【讨论】:

    • 谢谢,但我收到以下错误 - 除非父级已保存 app/controllers/security_users_controller.rb,否则无法调用 create。此外,使用构建,它似乎在制造诀窍,但也许我没有做正确的想法。在我的角色模型中,我应该有一个记录“用户”,所以也许我需要在连接表中添加记录来标记该用户是这个角色?
    • Mxm,我收到此错误 - 无法批量分配受保护的属性:security_users_role。你知道是什么原因造成的吗?
    • 是的,你必须在 security_users_roles_to_users.rb 中设置attr_accessible :security_users_role
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多