この質問はほとんど答えていますが、私はまだそれが残虐だと思います。私は本当にただ、このような割り当ては、私の周りグーグルをたくさんやったし、すべての情報が矛盾している、または多くの関係に多くのセットアップについて説明し、そして複数の1対多の関係をレールで作成する
@user.browsing_location = location1
@user.home_location = location2
を割り当てるやりたい Trouble with Rails has_many relationships
仲介テーブルを使用するメソッドについて説明します。しかし実際にはデータベースは、ユーザテーブルが2つの異なる名前のidフィールドを持つ必要があります。次のようなことはありますか?私はこのための余分なテーブルを作成することを避けるためにたいので、私のモデルの
ユーザークラス
class User < ActiveRecord::Base
#locations created by this user
has_many :locations, :foreign_key => :creator_id
#locations for browsing and visiting
belongs_to :browsing_location, :source => :location
belongs_to :home_location, :source => :location
end
場所クラス
class Location < ActiveRecord::Base
#Users who are just browsing this location now
has_many :browsing_users, :foreign_key => :browsing_location_id, :source => :users
#Users who are living here now
has_many :home_users, :foreign_key => :home_location_id, :source => :users
#User who created this location
has_one :user
end
かなり多くは、このような関係が必要になります。
ありがとうございます - これは私が必要と思うものです。今すぐ試してみてください。余分なテーブルを作成するために、能動的なレコードが舞台裏で魔法を使っているのです(has_manyには逆の関係もあります)。それとも、私はそれがすべて正しく設定されていることを確認するために、私のテーブル定義を参照する必要があることを意味ですか? –
Locationに属するクラスはUser型で、技術的にはUserクラスではないため、作成したhas_many関係はお互いに逆転しません。それ以外の場合は、多対多の関係があり、has_many:throughまたはhas_and_belongs_to_many関係のいずれかを行う必要があります。 –
foreign_keyの定義を何よりも検証するために、テーブル定義を見たいと思っていました。通常、foreign_keyを定義する必要はありませんが、正しく実行しているようです。 –