2016-05-11 6 views
-1

私はレールが初めてで、これは非常に基本的な質問です。私は外部キーとclass_nameの必要性を理解しようとしていますが、私はこの概念を理解する上でいくつかの問題に直面しています。
foreign_keyとclass_nameの関連付けを理解する

has_many :task, foreign_key: "created_by" 
has_many :memberships, class_name: "TaskMembership" 

こっちFOREIGN_KEYCLASS_NAMEの使用がどのようなものです。

+0

それらを参照してくださいは、カスタムクラス名と外部キーを定義するためのオプションです。 – Pavan

+0

何が使用ですか? –

+0

私はすでにそれを言っています。 – Pavan

答えて

0

ここでは

はあなたがUserモデルとポストmodel.Andがあると私の質問の答えでありますあなたは関連を設定する必要がありますUser has many post

User Model 
has_many :posts 

Post Model 
belongs_to :user 

は、今すぐあなたのユーザーはそう、我々はいくつかの意味のある名前を設定する必要がありそう代わりのユーザーたちは、著者を使用しますが、それはレールがAUTHOR_IDを探しますので、今、問題が発生します

Post Model 
belongs_to :author, class_name: 'User' 

を参照しているクラスを指定する必要がありますいくつかの著者であると仮定しますポスト表の列、ここで。だから外部キーがpicture.Weに来るが

Post Model 
belongs_to :author, class_name: 'User', foreign_key: 'user_id' 

をuser_idを見つける必要がありますより多くの、より良い説明association

-1

has_manyアソシエーションは、レールの1対多のタイプの関係に使用されます。たとえば、多くのプロファイルを持つことができるモデルUserがある場合、Userとプロファイルの関連付けは多くなります。

class User < ActiveRecord::Base 
     has_many :profiles 
    end 

    class Profile < ActiveRecord::Base 
     belongs_to :user 
    end 

プロファイルテーブルにuser_id以外の外部キーがある場合は、foreign_keyを明示的に指定します。同じクラス名の場合です。アソシエーション名が実際のモデル名と異なる場合は、アソシエーション後に明示的にクラス名を指定します(メンバーシップの場合と同じように)。 お手伝いをしてください。

+0

ええ私はクラス名が明示的に指定されていることを理解していますが、どうすればいいのですか?私の質問ここでclass_nameをいつ使うべきかはわかります –

+0

銀行相互作用システムを実装する必要があるとします。あなたはジェネリッククラスであるクラスUserを持っています、銀行のスタッフと顧客の両方に使用することができます。コミュニケーションモデルがあり、銀行スタッフと顧客IDの両方を格納したいとします。今では、スタッフのすべてのやりとりと顧客のすべてのやりとりを明示的にどのように得るのでしょうか? –

+0

それだけの例では、IDを使用しないでいろいろなシナリオを持つことができます。関連付けられたモデルには外部キーがあります。 銀行とユーザーの両方にAddressモデルを使用できます。'has_one bank_address、class_name:" Address " –

-1
モデル内の

class First < ActiveRecord::Base 
    has_many :seconds 
end 

class Second < ActiveRecord::Base 
    belongs_to :first 
end 

とあなたの2番目のクラスのテーブルで、first_id列を作成

関連する問題