在User.rb中
has_one :profile, :dependent => :destroy
has_many :prints, :dependent => :destroy
accepts_nested_attributes_for :profile
before_create :build_profile
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :profile_attributes
安排有问题吗?
编辑1:
错误是:“无法批量分配受保护的属性:配置文件”
编辑2:
my profile.rb model:
class Profile < ActiveRecord::Base
attr_accessible :name, :address, :phone
belongs_to :user
end
和我的表格:
<%= form_for("user", :url => user_registration_path) do |f| %>
<%= f.email_field :email, :autofocus => true, :placeholder => 'E-mail Address' %>
<%= f.password_field :password, :placeholder => 'Password' %>
<%= f.password_field :password_confirmation, :placeholder => 'Password Confirmation' %>
<%= f.fields_for :profile do |profile_form| %>
<%= profile_form.text_field :name, :placeholder => 'Name' %>
<%= profile_form.text_field :address, :placeholder => 'Address' %>
<%= profile_form.phone_field :phone, :placeholder => 'Phone (example: 0193284647)' %>
<% end %>
<p><%= f.submit "Sign up", :class=>'btn btn-primary' %> </p>
<% end %>
解决方案(使用@Matt答案):
<%= profile_form.text_field :name, :placeholder => 'Name' %>
<%= profile_form.text_field :address, :placeholder => 'Address' %>
<%= profile_form.phone_field :phone, :placeholder => 'Phone (example: 0193284647)'
因此它将使用“accepts_nested_attributes_for:profile”
答案 0 :(得分:0)
如果它抱怨profile
而不是profile_attributes
,那么您的表单可能无法正确设置。发布您的表单代码。它应该类似于以下内容:
控制器:
@user = User.new
查看:
<%= form_for @user do |form| %>
<%= form.fields_for :profile do |fields| %>
<%= fields.text_area :about_you %>
<% end %>
<%= form.submit %>
<% end %>
答案 1 :(得分:0)
您的控制器应如下所示:
def new
@user = User.new
@user.build_profile
end
删除钩子
before_create :build_profile
模型中的- 您不能在创建操作中初始化配置文件,它必须在新操作中发生。
并改变你的形式:
<%= form_for("user", :url => user_registration_path) do |f| %>
到此:
<%= form_for(@user, :url => user_registration_path) do |f| %>
您的attr_accessible似乎是正确的。
答案 2 :(得分:0)
使用:profile而不是:profile_attributes。
是我的愚蠢错误@Matt - 你是对的。 @Mattherick - 是的。模型中应省略“before_create:build_profile”。
实际上我没有使用注册控制器覆盖(用于设计)这是奇怪的,并且它工作得很好。