2012-03-20 11 views
2

は、私は次のとアカウントのモデルを持っている:関連オブジェクトを検索するのにhas_oneをconditionと一緒に使用しますが、どのように関連オブジェクトを作成しますか?

has_one :primary_user, :class_name => "User", :conditions => "role = 'primary_user'" 

のでaccount.primary_userがprimary_userの役割を持つユーザーを検索します@。

新しいアカウントを作成するときに、新しいprimary_userを作成できるようにします。それを行うための "Railsの方法"とは何ですか?

primary_user =メソッドを作成する必要はありますか?ここで

は私の私は、このフォームを送信した場合、私は

のActiveRecordを取得:: AssociationTypeMismatch(ユーザー(#2159789500)が期待する形式。..

<%= semantic_form_for @account do |f| %> 
    <%= f.input :account_name %> 

    <%= f.semantic_fields_for :primary_user do |user| %> 
     <%= user.input :email %> 
    <% end %> 
<% end %> 

を作成し、activesupportの:: HashWithIndifferentAccess(#2159703820)を持っています):

おかげ

答えて

2

リトルクリーナー:

has_one :primary_user, :class_name => "User", :conditions => { :role => "primary_user" } 

その後ストレート解決策:

<%= semantic_form_for @account do |f| %> 
    <%= f.input :account_name %> 

    <%= f.semantic_fields_for :primary_user, primary_user || build_primary_user do |user| %> 
     <%= user.input :email %> 
    <% end %> 
<% end %> 

しかし、私はあなたがこれは、@ fl00rは彼のポストで言っていることの上に構築コントローラ

@account.build_primary_user 
+0

これは、ユーザーにロール "primary_user"が追加されるかどうかはわかりません。 –

+0

それから提出した後。または、ユーザーbeforを追加する必要がありますか? – fl00r

+0

@Batkins '@ account.build_primary_user' – fl00r

0

で新しい行動にこれを追加することをお勧め...私はオブジェクトをビルドするための適切な場所がコントローラにあることに同意します。あなたのAccountsControllernewアクションで、あなただけのような行を追加する必要があります。

def new 
    @account = Account.new 
    @account.primary_user ||= @account.build_primary_user 
end 

@account.primary_user ||= @account.build_primary_user

だからあなたnewアクションは(追加した余分なプラスのもの)は、このようになります

作成フォームのコードはそのまま動作するはずです。

関連する問題