2016-08-22 9 views
0

私が達成しようとしているもののテーブルとリレーションシップの設定方法がわかりません。私は関係を通してhas_oneが必要だと思ったが、私はそれに対してアドバイスするいくつかのポストを見た。has_one関連付けまたは別の方法ですか?

私が達成しようとしているのは、自分のサービスのリストを作成し、スタッフがこのリストから行うサービスを選択することです。

は、ここで私がこれまで持っているものです。

class User 
has_many :staff 
    # user and shop have relationship via roles (not shown for simplicity) 
end 

class Shop 
    has_many :staff 
    has_many :services 
    # user and shop have relationship via roles (not shown for simplicity) 
end 

class Service 
    belongs_to :shop 
    has_many :staff through: :staff_services 
end 

class Staff 
    belongs_to :shop 
    belongs_to :user 
    has_many :services through: :staff_services 
end 

class StaffService 
    belongs_to :staff 
    # ? has_one :service through: :shop 
    # ? belongs_to :service 
end 

私がスタッフは彼らだけがのスタッフです店からサービスを選択することができるようにStaffServicesのための関係を設定するかどうかはわかりません。

ご協力いただければ幸いです。ありがとう!

答えて

0

私が正しく理解している場合、スタッフとサービスの間に多対多の関連付けが必要です。 StaffServiceテーブルにbelongs_to :serviceがほしいと思っています。これはあなたのようなで作業している関連を隔離するために単純化することができる。

class Service 
    has_many :staff, through: :staff_services 
end 

class Staff 
    has_many :services, through: :staff_services 
end 

class StaffService 
    belongs_to :staff 
    belongs_to :service 
end 

私はあなたがあなたの例では持っている他の団体がどのような方法で無効であるか間違っている示唆するわけではない - I多対多の部分だけを表示したかっただけです。 Shop &スタッフとShop &サービスの間に既にあるアソシエーションは、関係するスタッフとサービスのセットを制限するスコープを簡単に作成することを可能にします。

まだお持ちでない場合は、Rails Guide to Associationsを慎重にお読みください。

+0

私が最初にそれをやろうと思った方法です。しかし、このようにすれば、スタッフは潜在的に別の店のサービスを持つことができるとは限りません。 – adds

+0

さて、あなたはテーブルの形状を定義しています。そこにはデータの制限はありません。スタッフが別の店舗のサービスを受けないようにするには、同じ店舗とスタッフから来たサービスのみを返すスコープを用意することができます。 – jaydel

関連する問題