1

has many through 関係で 2 つのモデルを結合するテーブルがあります。

ユーザーは権限を通じて多くの役割を持っています

私のAuthoritiesテーブルには3つの列があります user_id role_id farm_id

各機関 (結合テーブル) が Firms と 1 対 1 の関係を持つようにしたいと考えています。これは可能ですか?

---おそらくもう少し情報を編集すると、より明確になります。

私は多くの「会社」を持っています

「ユーザー」は「フォロー」を通じて多くの企業を持つ

「ユーザー」には、「権限」を通じて複数の「役割」もあります

私は cancan gem を使用してユーザーの権利を制限しています。これにより、ユーザーは任意の会社をフォローできますが、編集できるのは 1 つの会社の詳細のみです。これは、ユーザーと会社の間に直接の 1 対 1 の関連付けを作成できないことを意味します。ユーザーと会社には既に多数のスルー アソシエーション - スルー フォローがあるためです。Current_user.firms は、フォローしているすべての企業を返します。

そのため、ユーザーとロールを結合して、権限モデルに編集権限を持っている会社を保存したいと思います。

https://docs.google.com/drawings/d/1CiKsUEdcS6hmKa23xsapWy33NS0Gp1f11a7TgaZbAy0/edit

これでテーブル レイアウトが表示されるはずです。点線は作成したい関連付けです。

現在、私のモデルは次のようになっています。

class Firm < ActiveRecord::Base

has_one :authority
has_many :follows, :dependent => :destroy
has_many :users, :through => :follows

class Follow < ActiveRecord::Base
belongs_to :firm
belongs_to :user

 class User < ActiveRecord::Base
 has_many :follows, :dependent => :destroy 
 has_many :firms, :through => :follows
 has_many :roles, :through => :authorities
 has_many :authorities

 class Role < ActiveRecord::Base
 has_many :users, :through => :authorities
 has_many :authorities

class Authority < ActiveRecord::Base
 belongs_to :users
belongs_to :roles
belongs_to :firm

私がこれを行うことができれば、特定の「権限」を選択して「会社」を追加するにはどうすればよいでしょうか。さらに、このネストされた属性をどのように読み取るのでしょうか?

前もって感謝します。

4

1 に答える 1

1

理由がわかりません。あなたの問題は何ですか?

class Authority < ActiveRecord::Base
    belongs_to :firm
end

class Firm < ActiveRecord::Base
    has_one :authority
end

次のように、機関の会社 ID を更新できるはずです。

authority = Authority.last
authority.firm = Firm.last # or authority.update_attribute(:firm_id, Firm.last.id)
authority.save
于 2012-05-01T20:36:12.947 に答える