我正在Rails 3.2.13
创建我的第一个嵌套表单。 User
正在注册,并填写email
,password
和address
信息以及company
信息..但是当用户点击提交时,错误就会显示。错误在底部。
我不确定这一行: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
请问我现在要做什么?
答案 0 :(得分: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