Rails 3:使用ActiveAdmin和has_one进行批量分配

时间:2011-09-28 16:41:45

标签: ruby-on-rails has-one mass-assignment activeadmin

我正在开发一个rails应用程序,其中我有两个模型UserClientUser由设计支持,负责身份验证,has_one Client保存给定用户的客户端详细信息。这种关系始终存在,因为我确保在创建Client时创建User模型。

对于我正在使用ActiveAdmin的管理区域。现在,当我尝试通过管理界面创建User时,我使用如下形式:

form do |f|
  f.inputs :username, :email, :password
  f.inputs :name => "Client", :for => :client do |client|
    client.inputs :name, :address, ...
  end
end

问题是UserClient都已保存,并且页面重新加载了验证错误。我已经检查过rails控制台,每次尝试创建WARNING: Can't mass-assign protected attributes: client_attributes时都会收到User消息。

我搜索了这个问题并发现为了允许进行大规模分配,必须为分配所允许的每个字段定义attr_accessible。因此,我已将此指令放在Client模型中,用于上述每个字段,并且消息不断出现,从而阻止模型正确保存。

有没有人对此有所了解?

1 个答案:

答案 0 :(得分:5)

问题不在您的Client模型中,而在您的User模型中 - 因为这是您尝试创建的主要模型。您需要做的就是将client_attributes添加到attr_accessible模型中的User属性列表中,就像日志文件中的错误消息所示,例如:

class User < ActiveRecord::Base
  attr_accessible :client_attributes
end

我想你已经在User类中有了一个可访问属性列表。所以只需将client_attributes添加到该列表的末尾即可。

您无需更改对Client模型所做的更改(即向attr_accessible添加属性列表)。如果你愿意,你也可以继续并撤消它。