1

尝试在单个表单上显示我的用户和配置文件模型时,我在尝试让 *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>

值得一提的是,尽管我已经阅读了文档指南,但我对 rails 还很陌生,并不确定这些功能是如何工作的。同样在我的搜索中,很多fields_for一个一对多关系的例子,所以也许我以错误的方式处理这个问题?

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

干杯,

山姆

4

1 回答 1

5

在您的代码中:

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

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

<%= f.fields_for :profile do |profile_form| %>
于 2011-03-22T10:12:00.350 回答