has_many:通过关联问题

时间:2010-08-16 20:09:19

标签: ruby-on-rails has-many

我对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

1 个答案:

答案 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。