使用has_one关系设计更新用户记录

时间:2011-08-11 00:22:31

标签: ruby-on-rails-3 devise

我正在使用devise来处理我的用户身份验证,并且在我的用户模型中,我已声明每个用户has_one:role。

我使用另一个表来保存我的所有用户角色/权限,我想知道如何更新角色?

编辑 - 这是我的用户模型

  has_one :role, :dependent => :destroy
  accepts_nested_attributes_for :role, :allow_destroy => true
  attr_accessible :stuff.... :role

我的榜样

 belongs_to :user

我已将此添加到我的表单中:

<%= f.fields_for :role, Role.new do |r| %>
<li class="full_width">
  <%= r.label "User type" %>
  <%= r.select(:status, %w[member artist commercial],{:include_blank => false}) %>
</li>
<% end %>

但它永远不会保存角色记录,我猜它是因为用户模型没有attr_accessible:角色所以我设置了它,现在当我尝试保存时我得到一个AssociationTypeMismatch错误

编辑 - 添加了accepts_attributes_for,现在我没有收到错误但是角色记录没有保存。控制台显示

警告:无法批量分配受保护的属性:role_attributes

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

从您粘贴的代码段中,您不清楚在哪里构建新角色与用户之间的关联。您可能需要执行@ user.build_role(...)或@ role.build_user(...)之类的操作,以便在保存之前关联用户和角色。