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

时间:2011-03-24 19:05:56

标签: ruby-on-rails ruby-on-rails-3 devise nested-attributes has-one

我想让我的用户表单也允许用户通过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 %>

3 个答案:

答案 0 :(得分:6)

company的{​​{1}}属性不应为 - User,因此无论是在控制器中还是在表单中,都要创建它:

nil

答案 1 :(得分:4)

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

class User
  # Blah blah blah
  def profile
    super || build_profile
  end
end

答案 2 :(得分:0)

Zabba的上述解决方案仅对我有用:

<% @user.build_profile if @user.profile.nil? %>

Othwerise,该观点不知道“用户”是什么