我遇到的问题是,当我以嵌套的形式使用fields_for时,它会生成名称错误的字段。
简化模型是:
class User < ActiveRecord::Base
has_one :owned_account, :class_name => "Account", :foreign_key => "user_id"
accepts_nested_attributes_for :owned_account
attr_accessible :email, ... :owned_account, :owned_account_attributes
end
class Account < ActiveRecord::Base
belongs_to :owner, :class_name => 'User', :foreign_key => 'user_id'
attr_accessible :subdomain
end
在视图中(顺便说一下,这是一个Devise视图)
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<div class="inputs">
<% resource.build_owned_account %>
<%= f.fields_for resource.owned_account do |a| %>
<p>
<%= a.label :subdomain, "Account handle" %>
<%= a.text_field :subdomain %>
</p>
<% end %>
<p>
...
<% end %>
它生成的标记是:
<p>
<label for="user_account_subdomain">Account handle</label>
<input id="user_account_subdomain" name="user[account][subdomain]" size="30" type="text">
</p>
所以它正在生成用户[account] [subdomain]而不是user [owned_account] [subdomain]。我已经尝试重写该字段的名称,但似乎可以使其工作。
任何帮助都会非常感谢,提前谢谢。
答案 0 :(得分:3)
IIRC rails根据模型名称而不是关联名称生成名称。
你尝试过类似的事情吗?<%= f.fields_for :owned_account, resource.owned_account do |a| %>
答案 1 :(得分:1)
为了触发你需要做的嵌套属性魔力
f.fields_for :owned_account do |account_fields|
如果您提供帐户的实际实例,则不知道它是与owned_account
关联相关的实例