我正在开发一个rails应用程序,其中我有两个模型User
和Client
。
User
由设计支持,负责身份验证,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
问题是User
和Client
都已保存,并且页面重新加载了验证错误。我已经检查过rails控制台,每次尝试创建WARNING: Can't mass-assign protected attributes: client_attributes
时都会收到User
消息。
我搜索了这个问题并发现为了允许进行大规模分配,必须为分配所允许的每个字段定义attr_accessible
。因此,我已将此指令放在Client
模型中,用于上述每个字段,并且消息不断出现,从而阻止模型正确保存。
有没有人对此有所了解?
答案 0 :(得分:5)
问题不在您的Client
模型中,而在您的User
模型中 - 因为这是您尝试创建的主要模型。您需要做的就是将client_attributes
添加到attr_accessible
模型中的User
属性列表中,就像日志文件中的错误消息所示,例如:
class User < ActiveRecord::Base
attr_accessible :client_attributes
end
我想你已经在User
类中有了一个可访问属性列表。所以只需将client_attributes
添加到该列表的末尾即可。
您无需更改对Client
模型所做的更改(即向attr_accessible
添加属性列表)。如果你愿意,你也可以继续并撤消它。