在尝试在单个表单上显示我的用户和配置文件模型时尝试获取* 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>
值得一提的是,虽然我已经阅读了documentation和guide,但我对rails很不熟悉并且不确定这些功能是如何工作的。同样在我的搜索中有很多关于一对多关系的fields_的例子,所以也许我会以错误的方式解决这个问题?
非常感谢所有帮助,建议和进一步阅读: - )
干杯,
萨姆
答案 0 :(得分:5)
在您的代码中:
<% f.fields_for :profile do |profile_form| %>
这不需要像这样编写(由于Rails 3的新行为):
<%= f.fields_for :profile do |profile_form| %>