2010-08-16 120 views
1

我對ruby有點新鮮感,我對has_many有一個問題:通過關聯。我的系統目前使用Authlogic和Declarative_auth進行設置。在我提交用戶的那一刻,它創建了一切正確的東西,除非它不在用戶表中插入role_id,即使它顯示它在提交時傳遞。它也不會將ID保存在分配表中。首先,我想問題是,role_id在用戶表中甚至是必需的嗎?其次,賦值表中的user_id和role_id字段需要聲明爲foreign_key還是rails自動處理?我很感激這方面的幫助。has_many:通過關聯問題

class User < ActiveRecord::Base 
    acts_as_authentic 
    has_many :assignments 
    has_many :roles, :through => :assignments 

    def role_symbols 
    roles.map do |role| 
     role.name.underscore.to_sym 
    end 
    end 
end 

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

class Assignment < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :role 
end 

回答

0

在用戶表ROLE_ID甚至是必要的?

不,角色ID列應該只在賦值表中。在這種情況下,用戶表將不會被更新,只是分配。可能應該使用給定的role_id和user_id創建一個新的Assignment。

做USER_ID和 ROLE_ID領域分配表必須 聲明爲foreign_key或不 導軌自動處理呢?

Rails不需要DB級約束。 Rails使用關聯唯一需要的是關聯聲明本身以及相應表中相應的id列的存在。

This Railscast是一個很好的介紹has_many:through。

+0

此外http://railscasts.com/episodes/188-claclarative-authorization – mark 2010-08-16 20:29:31