Rails易于嵌套的形式

时间:2013-08-13 14:10:45

标签: ruby-on-rails-3

你好我有嵌套表格的问题..我正在寻找一个小时,不知道我忘记了..

模型/ trainer.rb

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

模型/ user.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

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

Can't mass-assign protected attributes: user

怎么了?谢谢

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

[users]
id
trainer_id
name
surname

[trainers]
telephone

如果有兴趣的话,我上传了简化简易应用程序:) https://github.com/ScottHiscock/NestedForm

3 个答案:

答案 0 :(得分:2)

参考accepts_nested_attributes_for

  

为指定的关联定义属性writer。       如果您使用的是attr_protectedattr_accessible,则需要添加       属性writer到允许列表。

所以我认为你必须做以下事情:

class Trainer < ActiveRecord::Base
  attr_accessible :telephone, :user_attributes

答案 1 :(得分:0)

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

attr_accessible:telephone,:user_attributes

或试试这个

attr_accessible:telephone,:user

答案 2 :(得分:0)

错误在视野中,我有

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

但是正确的是

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

: - )