使用一对一关系时,没有通过fields_for输出

时间:2011-03-22 10:08:30

标签: ruby-on-rails ruby-on-rails-3 one-to-one has-one fields-for

在尝试在单个表单上显示我的用户和配置文件模型时尝试获取* fields_for *以产生输出时遇到了一些麻烦,这些使用* has_one *和* belongs_to *关系。

所以这里是模型类顶部的提取:

class User < ActiveRecord::Base
  has_one :profile
  accepts_nested_attributes_for :profile

class Profile < ActiveRecord::Base
  belongs_to :user

控制器非常简单和标准:

  def new
    @user = User.new
  end

  def edit
    @user = User.find(params[:id])
  end

这是现有视图中的一个片段:

<%= form_for(@user) do |f| %>

  <% f.fields_for :profile do |profile_form| %>
    <div class="field">
      <%= profile_form.label :name %><br />
      <%= profile_form.text_field :name %>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :email %><br />
    <%= f.text_field :email %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我尝试过其他事情,比如:

 <% fields_for @user.profile do |profile_form| %>

如果我手动添加字段,一切正常:

  <div class="field">
    <label for="user_name">Name</label><br>
    <input id="user_name" name="user[profile_attributes][name]" size="30" type="text" value="<%= @user.profile.name %>">
  </div>

值得一提的是,虽然我已经阅读了documentationguide,但我对rails很不熟悉并且不确定这些功能是如何工作的。同样在我的搜索中有很多关于一对多关系的fields_的例子,所以也许我会以错误的方式解决这个问题?

非常感谢所有帮助,建议和进一步阅读: - )

干杯,

萨姆

1 个答案:

答案 0 :(得分:5)

在您的代码中:

<% f.fields_for :profile do |profile_form| %>

这不需要像这样编写(由于Rails 3的新行为):

<%= f.fields_for :profile do |profile_form| %>