私は学校のために構築されたレールアプリケーションを持っています。システム内のユーザーは、自分の子供の活動を追跡する親(別名、家族、またはメンバーのみ)です。教師はユーザーでもあり、ログインしてアクティビティに参加することができます。メンバーモデルは、アプリケーションが参加者を見つけるために使用する場所です。教師がメンバーモデルに追加され、同じ理由で親が追加されていることがわかります。Rails - 適切な関係モデルは何ですか
このアプリケーションに追加された教師は、各テーブルuser、user_member、およびmemberに1つのレコードを持ちます。彼がログインできるようにするユーザーのレコード、メンバーを検索して検索できるようにするレコード、user_memberの1つを使用して関連付けを行います。この場合、ユーザー自身のメンバーレコードを見つけることは簡単です。しかし、私がログインしているシステムの親と2人の子供、JamesとBrianの場合、メンバーテーブルにはJames、Brian、自分用の3つのレコードがあります。私はメンバーの記録がJamesかBrianではなく私のものであることを知る必要があります。
これをモデル化する最良の方法は何ですか?私は2つのオプションを考えました。1)userテーブルにuser自身のmember_idを指す外部キーがあります。または、2)user_membersテーブルには、このuser_idのmember_idがユーザのメンバーレコードであることを示す 'own_member'というブール値があります。それが望ましいだろうか?もう一つのレールは?そして、どのようにしてコールをビルド/関連付けを作成するのですか?
現在の関係は、このようにモデル化されています
class User < ActiveRecord::Base
has_many :user_members
has_many :members, :through => :user_members
end
class UserMember < ActiveRecord::Base
belongs_to :user
belongs_to :member
end
class Member < ActiveRecord::Base
has_many :user_members
has_many :user, :through => :user_members
end
良いヒント。メンバー側からの関連付けの設定に関する質問がありました。 '> me_as_member.user = me_as_user'というコンソールで次のようにして、メンバーのuser_idを設定しようとすると失敗します。 NoMethodError:未定義のメソッド 'const_defined? 'を取得します。 #のために。私は間違って何をしていますか? –
私は、祖先の宝石を使用している間、スコープの予約語「親」に見えるものを使用していました。スコープ名を変更すると問題が解決しました。 –