0

在用户.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:

我的 profile.rb 模型:

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”

4

3 回答 3

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 %>
于 2013-05-28T08:18:55.900 回答
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 似乎是正确的。

于 2013-05-28T09:54:41.527 回答
0

使用 :profile 而不是 :profile_attributes 是我的愚蠢错误。

@Matt - 你是对的。@Mattherick - 是的。模型中应省略“before_create :build_profile”。

事实上,我没有使用注册控制器覆盖(用于设计),这很奇怪,而且效果很好。

于 2013-05-28T10:46:06.980 回答