2011-12-22 34 views
0

我遇到的问题是,当我在嵌套窗体中使用fields_for时,它会生成错误名称的字段。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 

在视图(这是由的方式设计视图)

<%= 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> 

所以它正在生成用户[帐户] [子域]而不是用户[owned_account] [子域]。我尝试覆盖该字段的名称,但可能似乎得到这个工作。

任何帮助将不胜感激,在此先感谢。

回答

1

为了触发嵌套的属性魔术性,你需要做

f.fields_for :owned_account do |account_fields| 

如果你给账号轨的实际情况不知道,这是一个有关owned_account协会

+0

谢谢你已经做到了!我想我之前有一些类似的东西,因为那时我并没有使用resource.build_owned_account,谢谢你的帮助。 – slarti42uk 2011-12-22 10:34:14

2

IIRC导轨根据模型名称而不是关联名称生成名称。

你尝试过这样的:

<%= f.fields_for :owned_account, resource.owned_account do |a| %>