如何在一个关系中设计使用accepts_nested_attributes_for?

Jos*_*vak 3 ruby-on-rails has-one nested-attributes devise ruby-on-rails-3

我试图让我的用户表单也允许用户通过form_for同时填写他们的公司资料.由于某种原因,它没有显示公司领域.这是我的控制器和布局代码.

class User < ActiveRecord::Base
  attr_accessible :company_attributes

  has_one :company
  accepts_nested_attributes_for :company
end

class Company < ActiveRecord::Base
  belongs_to :user

  # Validation
  validates :name, :presence => true
end

<%= f.fields_for :company do |company_form| %>
  <div class="field">
    <%= company_form.label :name, "Company Name" %><br />
    <%= company_form.text_field :name %>
  </div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

Zab*_*bba 6

company属性User应该不是 - nil所以无论是在控制器中还是在表单中,都要创建它:

<% user.build_company if user.company.nil? %>
<%= f.fields_for :company do |company_form| %>
...
Run Code Online (Sandbox Code Playgroud)

  • 应该在User#after_initialize中执行此操作 (2认同)

sea*_*rts 5

在模型中而不是视图或控制器中执行此操作可能更好。

class User
  # Blah blah blah
  def profile
    super || build_profile
  end
end
Run Code Online (Sandbox Code Playgroud)