我正在开发一个 Rails 应用程序,其中有两个模型 User
和 Client
。
User
由 devise 支持并负责身份验证,而 has_one
Client
则保存给定用户的客户端详细信息。这种关系始终存在,因为我确保每当创建 User
时都会创建 Client
模型。
对于管理区域,我使用的是ActiveAdmin
。现在,当我尝试通过管理界面创建用户
时,我使用如下形式:
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 控制台,每次尝试创建用户
时,都会出现一条警告:无法批量分配 protected 属性:client_attributes
消息。
我搜索了这个问题,发现为了允许批量分配,必须为允许分配的每个字段定义 attr_accessible
。因此,我已将此指令放入上述每个字段的 Client
模型中,并且该消息不断出现,导致模型无法正确保存。
有人知道这件事吗?
最佳答案
问题不在于您的 Client
模型,而在于您的 User
模型 - 因为这是您尝试创建的主要模型。您所需要做的就是将 client_attributes
添加到 User
模型中的 attr_accessible
属性列表中,就像日志文件中的错误消息一样例如说:
class User < ActiveRecord::Base
attr_accessible :client_attributes
end
我想您在 User
类中已经有了一个可访问属性的列表。因此,只需将 client_attributes
添加到该列表的末尾即可。
您无需对 Client
模型进行更改(即向 attr_accessible
添加属性列表)即可实现此功能。如果您愿意,您也可以继续撤消该操作。
关于ruby-on-rails - rails 3 : Mass-assignment with ActiveAdmin and has_one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7586612/