3

ID と名前のフィールド (アクティブ、非アクティブ、保留中など) のみを含むステータス テーブルがあります。次に、Users、Achievements、Badges などのテーブルがあり、それぞれに status_id 外部キーが含まれています。モデルの関連付けは正しいですか?

class Status < ActiveRecord::Base
  has_many :achievements
  has_many :badges
  has_many :users
end

class User < ActiveRecord::Base
  belongs_to :status
end

class Badge < ActiveRecord::Base
  belongs_to :status
end

class Achievement < ActiveRecord::Base
  belongs_to :status
end

ルックアップ テーブルの場合、has_one と has_many の違いを正しく読み取る方法に苦労しています。ユーザーには 1 つの会社と 1 つのプロファイルがあり、1 つの会社には多くのユーザーがいることがわかっていますが、これは私には逆に思えます。

4

1 に答える 1

8

最も単純な関連付けの設定は次のとおりです。

class User < ActiveRecord::Base
  has_one :status
end

それはあなたが投稿したものを正確に説明しています。あなたの解決策は機能しますが、あなたが説明したことはやり過ぎです。上記で投稿した関連付けは、ユーザー モデルに 1 つのメソッドを追加するだけです。つまり、

@user = User.find(1)
@user.status

一方、特定のステータスを持つすべてのユーザーを表示するための単純なセマンティクスが必要な場合は、THEN を追加します。

class Status < ActiveRecord::Base
  has_many :users
end

だから今、あなたはできる:

@status = Status.find_by_description('Active').first()

@status.users

どちらの場合も、ユーザー モデルに属性「status_id」があればよいことに注意してください。

Belongs_to は、暗黙的な階層がある場合に適しています。つまり、

class Child << ActiveRecord::Base
   belongs_to :parent
end
于 2012-05-28T20:39:34.170 に答える