0

您好,我对嵌套表单有问题.. 我看了一个小时,不知道我忘记了什么..

模型/trainer.rb

class Trainer < ActiveRecord::Base
  attr_accessible :telephone, :user_attributes
  has_one :user
  accepts_nested_attributes_for :user
end

模型/用户.rb

class User < ActiveRecord::Base
  belongs_to :trainer

  attr_accessible :email, :image_url, :name, :password_hash, :password_salt, ...
  attr_accessible :password, :password_confirmation
  attr_accessor :password
  before_save :encrypt_password

  <+ validations ...>

控制器/trainers_controller.rb

  def new
    @trainer = Trainer.new
    @trainer.build_user

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @trainer }
    end
  end

我可以显示新的培训师表单视图(我将所有用户列添加为嵌套)但是当我点击创建时我得到

Can't mass-assign protected attributes: user

怎么了 ?谢谢你

编辑:我的数据库架构看起来像

[users]
id
trainer_id
name
surname

[trainers]
telephone

如果有人感兴趣,我在这里上传了我的简化简单应用程序:) https://github.com/ScottHiscock/NestedForm

4

3 回答 3

2

参考accepts_nested_attributes_for

为指定的关联定义属性编写器。如果您使用attr_protectedor attr_accessible,则需要将属性 writer 添加到允许列表中。

所以我认为你必须做到以下几点:

class Trainer < ActiveRecord::Base
  attr_accessible :telephone, :user_attributes
于 2013-08-13T14:18:35.097 回答
0

错误是在视图中,我有

<%= f.fields_for :users do |u| %>

但正确的是

<%= f.fields_for :user do |u| %>

:-)

于 2013-08-14T00:24:42.337 回答
0

还将用户添加到 trainer.rb 模型的 attr_accessible 列表,如下所示

attr_accessible :telephone, :user_attributes

或试试这个

attr_accessible:电话,:用户

于 2013-08-13T16:31:46.337 回答