ruby-on-rails - rails 3 : Mass-assignment with ActiveAdmin and has_one

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

我正在开发一个 Rails 应用程序,其中有两个模型 UserClientUser 由 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

问题在于,UserClient 均已保存,并且页面重新加载时出现验证错误。我检查了 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/

相关文章:

ruby-on-rails-3 - 什么是 Rails 3 中的质量分配

ruby-on-rails - 部署 Rails 应用程序时出错。 'can' t 激活 pg (~>0.18), 已经被 pg 1.0 激活

ruby-on-rails - has_one 关系如果超过一个则自动设置为 nil

ruby-on-rails - 您如何覆盖 Rails has_one 关联的 getter 方法?

ruby-on-rails - rails has_one 通过一个集合

ruby-on-rails-3 - 使用 RSpec 测试范围质量分配

ruby-on-rails - 浏览器关闭时销毁 session - Ruby on Rails

ruby-on-rails - 如果新属性与现有属性相同,Active Record 是否继续使用 'save'?

ruby-on-rails - 如何最好地干燥will_paginate选项

php - Laravel 5.2 模型 $fillable 被忽略了吗?