2010-08-16 119 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