2010-12-02 7 views
0

ユーザーhas_one:サブスクリプション、サブスクリプションbelongs_to:userと仮定し、accepts_nested_attributes_forを使用してサブスクリプション属性をユーザー作成フォームにネストします。 User.email == Subscription.emailに基づいてサブスクリプション(存在する場合)既存のサブスクリプションがUSER_ID = nilの既存のネストされた属性を更新する方法FK

答えて

1

を持つことができ

注意がおそらく何がやりたいことは、外部キーとして電子メールを使用している:私はこれがに分割する必要があるだろうと想像

class User < ActiveRecord::Base 
    has_one :subscription, :foreign_key => "email", :primary_key => "email" 
end 
+0

HRMは、ええ...私はそのことについて考えました。そのアイデアで周りをおもしろにさせてください。ありがとう。 –

+0

私は時折それをしました。自然なキーであることを除けばうまく動作します。つまり、ユーザーが電子メールアドレスを変更したいときに問題に遭遇します。両方のテーブルの電子メールにインデックスがあることを確認してください。 – karmajunkie

+0

私はアソシエーションをセットアップしましたが、まだ重複したレコードを取得しています。私は、accepts_nested_attributes_forに対してupdate_only => trueを持っています。何か案は? –

0

2段階プロセス:

  1. 更新するユーザーを特定します。
  2. このレコードにユーザーにサブスクリプションを設定し、ユーザーの電子メールアドレスと(もしあれば)のサブスクリプションを見つけます。
  3. 通常のように、ユーザーを更新します。関連付けが現在存在するので(つまり、user.subscriptionはゼロにならない)、サブスクリプションレコードは正しく更新されます。
関連する問題