2011-09-15 9 views
1

私はUsersモデルとTasksモデルを持っています。どのようにオブジェクトをレールで2回関連付けることができますか?

タスクには、ユーザータイプの作成者と、ユーザータイプの譲受人があります。

私はすでに作成者の関係を働かせるためにAddUserIdtoTasksの移行を行っていますが、今はもう同じことをして割り当て先を追加する必要がありますが、私はすでにキーワード 'user'を使用しています。適切な関係を構築するにはどうすればいいですか。

タスクには常に1人の譲受人しかいません。

私はユーザーモデルにdeviseを使用しています。

答えて

2
has_one :creator, :class_name => "User" 
has_one :asignee, :class_name => "User" 

またはbelongs_to、あなたのフィールドが設定されている方法に応じて。 has_onebelongs_toは、あなたのような場合には、どちらもオプションの:class_name引数をとります。

+0

したがって、creator_idまたはasignee_idを呼び出すことができますか? – Btuman

0

は、あなたのタスクモデルでフィールドassignee_idを作成し、関係

class User < AR::Base 
    has_many: :assigned_tasks, :class_name => 'Task', :foreign_key => :assignee_id 
end 

の反対側に

class Task < AR::Base 
    belongs_to :assignee, :class_name => 'User' 
end 

のような関係のためにそれを使用して申し訳ありませんが、:class_nameでなければなりません。 :foreign_keyパラメータを持つユーザクラスも更新しました。user.assigned_tasksは、:user_idパラメータ(has_manyのデフォルト値、 "#{class_name} _id")を使用してレコードを結合しました。

私が投稿したリンクを読んでいただきたいと思っています。これらのことはすべて私よりも優れています。

出典:http://guides.rubyonrails.org/association_basics.html#detailed-association-reference

+0

私はこれを試しましたが、クラスを拾っていないようです。あなたはどこから取得されましたか?assigned_tasksから - その背後にある論理は何ですか? FYIは1:1の関係です。 – cjm2671

+0

ごめんなさい、1:1の関係ビットを無視してください。 – cjm2671

+0

私は私の答えを更新しました、それは間違いを含んでいました。 ':assigned_task'の背後にあるロジックには何もありません。私は私の選択の名前を拾い、その後私はARの慣習を無効にしました。あなたは望むように変更することができます。 – Fabio

関連する問題