我对ruby有点新意,而且我对has_many有一个问题:通过关联。我的系统目前使用Authlogic和Declarative_auth进行设置。在我提交用户的那一刻,它会正确地创建所有内容,除非它没有在users表中插入role_id,即使它显示它在提交时传递。它也不会将ID保存在赋值表中。首先,我想问题是,在users表中是否还需要role_id?其次,分配表中的user_id和role_id字段是否需要声明为foreign_key,还是rails会自动处理这个?我对此表示感谢。
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 :(得分:0)
在users表中甚至是必需的role_id吗?
不,role_id列应该只在赋值表中。在这种情况下,用户表根本不会更新,只是分配。可能应该使用给定的role_id和user_id创建新的Assignment。
执行user_id和role_id字段 分配表需要 声明为foreign_key或者 rails自动处理这个?
Rails不需要DB级别的约束。 Rails使用关联唯一需要的是关联声明本身以及相应表中相应id列的存在。
This Railscast是一个很好的介绍has_many:through。