2

ブログを作っているとしましょう。通常、モデルは次のようになります。

class User
  has_many :posts
end

class Post
  belongs_to :user
end

それらのスキーマは次のようになります。

User
  id

Post
  id
  user_id

しかし今では、ユーザーは Facebook/Twitter/etc からログインできるので、投稿を User オブジェクトではなく、プロバイダーとプロバイダーのuidの組み合わせに属させたいと考えています。

新しいスキーマは次のようになります。

User
  id
  provider
  uid

Post
  id
  user_provider
  user_uid

そして、モデルがどのように見えるかはわかりません:

class User
  has_many :posts, :foreign_key => ['user_provider', 'user_uid'] # Is this right??
end

class Post
  belongs_to :user, :class_name => User # Again, this is a guess...
end

私は正しい軌道に乗っていますか?これを行うRailsの方法は何ですか?

4

2 に答える 2

1

すぐにレールに複合主キーを設定することはできません。宝石を使用する必要があると思います。回避策を見つけることをお勧めします。

ただし、開始点を確認するには、次を参照してください。

http://compositekeys.rubyforge.org/

于 2012-08-30T05:43:08.093 に答える
0

なぜこれをやりたいのかについて詳しく説明できますか?

主キーは「id」と呼ばれる整数であるため、外部キーはこれに従います。

ただし、複合インデックスを作成して複合一意性を確保することを妨げるものは何もありません。

Post モデルでは、次のように記述できます。

validate_uniqueness_of :uid, :scope => :provider

または、より新しい Rails 3 構文を使用します。

validates :uid, :uniqueness => {:scope => :provider}

複合インデックスを移行に追加できます。

add_index :posts, [:uid, :provider]

または一意のインデックスを使用してデータベース レベルで一意性を適用するには:

add_index :posts, [:uid, :provider], :unique => true
于 2012-08-30T09:38:02.027 に答える