2011-07-26 12 views
3

接続したいモデルが3つあればどうなりますか?例えば多くの3つのモデルを持っています。

ユーザーは、さまざまなアプリケーションのための多くの異なる権限を持つことができます。

は、だから私は、格納するテーブルが必要になります。

user_id 
permission_id 
application_id 

はhas_and_belongs_to_manyアソシエーションであることは可能ですか?

おかげ

答えて

5

私はhas_many:throughでそれを行います。基本的には

class Upa < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :permission 
    belongs_to :application 
end 
class User < ActiveRecord::Base 
    has_many :permissions, :through => :upas 
    has_many :applications, :through => :upas 
end 
class Permission < ActiveRecord::Base 
    has_many :users, :through => :upas 
    has_many :applications, :through => :upas 
end 
class Application < ActiveRecord::Base 
    has_many :permissions, :through => :upas 
    has_many :users, :through => :upas 
end 

examples of has_many :through

使用すると、1つの古典1で記述できる関係の任意の並べ替え、多くのリレーショナルデータベースでは、多くの関係に多くの1つは、ActiveRecordの中に記述することができます。

+0

これにネストされたフォームを使用する方法の例を提供することは可能ですか?つまり、ユーザーからアプリケーションとアクセス許可を更新できますか? – glarkou

+0

[asciicastsのネストされたモデルは、パート1と2を形成します](http://asciicasts.com/episodes/196-nested-model-form-part-1)。 Rails 3の特定のユースケースについて注意する必要がありますが、Rails 2では、既存の子と新しい親の関連付けを行うことができます(たとえば、既存のアクセス権に結びつけたい新しいユーザーがいる場合)。 Rails 3では、セキュリティ上のリスクとみなされるため、これ以上は実行できないため、基本的な@ parent.saveは失敗します。 [これについての討論](https://gist.github.com/897939/4da2160f28575d574c90c6fbc765b238900bd645) –

+0

このような場合、 'user.permissions'とはどういう意味ですか?すべてのアプリケーションの権限?ユーザがアプリケーション「A1」に対して許可「P1」を有し、アプリケーション「A2」に対して「P2」を有するとする。あなたは 'has_many:through'で' [P1、P2] 'を得るのですが、どうしますか? –

関連する問題