2011-12-22 5 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> 

user [owned_account] [subdomain]の代わりにuser [account] [subdomain]を生成しています。私はフィールドの名前を上書きしようとしましたが、それを動作させるように見えるかもしれません。

ご協力いただきまして、ありがとうございます。

答えて

1

をアカウントレールの実際のインスタンスがあることを知らない与える場合は

f.fields_for :owned_account do |account_fields| 

を行う必要がありmagicness owned_account関連に関連するものです

+0

ありがとうございました!私はresource.build_owned_accountを入れる前に同様のことがあったと思うので、その時点では動作していませんでした。ご協力いただきありがとうございます。 – slarti42uk

2

IIRC railsは、関連付けの名前ではなく、モデルの名前に基づいて名前を生成します。

はあなたのような何かを試してみました:ネストされた属性をトリガするために

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