0

我正在创建我的第一个嵌套表单Rails 3.2.13User正在注册,他填写email,信息和password信息..但用户点击提交时显示错误。错误在底部。addresscompany

我不确定这一行:attr_accessible :address_attributes, :company_attributes 我读过它可能会有所帮助,但它没有,并且由于一对一的关系,我在视图中有地址,但在模型中有地址,但是如果我有<%= f.fields_for :**address** do |builder| %>表格,则不会显示。请问我该怎么办?:-) 帖子然后发送

"companies"=>{"name"=>"Companyname"

用户模型

class User < ActiveRecord::Base
  attr_accessible ...

    has_many :orders
    belongs_to :address
    belongs_to :company

    accepts_nested_attributes_for :address, :company
    attr_accessible :address_attributes, :company_attributes

公司模式

class Company < ActiveRecord::Base
  attr_accessible ...
    has_many :users
    validates_presence_of ...
end

地址模型

class Address < ActiveRecord::Base
  attr_accessible ...
    has_many :orders, :foreign_key => 'payment_address_id'
    has_many :orders, :foreign_key => 'delivery_address_id'
    has_many :users

    validates_presence_of ...

end

new.html.erb(创建新用户)

<%= form_for @user do |f| %>
  ...

  <%= f.fields_for :addresses do |builder| %>
   ...
  <% end %> 

  <%= f.fields_for :companies do |builder| %>
   ...
  <% end %> 

  <%= f.submit %>
<% end %>

我点击提交时出错

Can't mass-assign protected attributes: addresses, companies

编辑:

第一个错误:我更改了班级用户

belongs_to :address
belongs_to :company
on
has_one :address
has_one :company

地址和公司模型中我编辑

has_many :users
on
belongs_to :user

但是嵌套表单没有显示在视图中..我尝试通过添加 .build 方法来编辑用户控制器

 def new
   @user = User.new
   @user.company.build
   @user.address.build
 end

但我得到了新的错误

undefined method `build' for nil:NilClass

请问我现在该怎么办?

4

1 回答 1

1

一天前我有一个这样的案例,这就是我使用的。

class User
  attr_accessible :name, :email, :company_attributes, :address_attributes
  has_one :company
  accepts_nested_attributes_for :company
end

和电子邮件设置:

class Company
  belongs_to :user
end

在此之后我可以在控制台中运行:

User.new.build_company

至于形式:

<%= form_for @user do |f| %>
  <%= f.fields_for :company do |builder| %>
    <%= f.text_field :name %>
  <% end %>
<% end %>

在控制器中,您只需初始化@user变量,无需执行@user.company.build@user.address.build

于 2013-07-12T21:02:32.860 回答