在同一型号上有很多AND HABTM

时间:2011-11-02 15:27:05

标签: ruby-on-rails has-and-belongs-to-many has-many

我有两个模型Site和User。当用户向应用程序注册时,他们会选择要属于的站点。所以网站has_many:用户和用户belongs_to:site。

应用\模型\ site.rb

class Site < ActiveRecord::Base

has_many :users

end

应用\模型\ user.rb

class User < ActiveRecord::Base

  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable

    belongs_to :site
    has_and_belongs_to_many :roles, :uniq => true

end

这实际上反映了用户的主站点,我经常调用该关系来找出用户所在的位置,例如:

&lt;%= user.lastname%&gt;,&lt;%= user.firstname%&gt;来自网站:&lt;%= user.site.name%&gt; 这意味着: 来自Site的Smith,John:GenericCo Operations

我想添加一个habtm关系,用户可以在其中支持许多网站,因此用户可以从列出网站的复选框中选择他们支持的网站。

我熟悉habtm关系,因为我的用户拥有并且属于许多角色。我建立了这个

has_and_belongs_to_many :roles, :uniq => true

我知道如果我添加连接表并使用

这一事实

has_and_belongs_to_many:sites

在我的模型上,一切都会因为大量错误而疯狂。我将不胜感激任何有用的建议和代码提示。

1 个答案:

答案 0 :(得分:4)

habtm的第一个参数是您将调用以获取集合的方法的名称。它可以是您想要的任何内容,只要您使用:class_name

指定模型类即可
has_and_belongs_to_many :supported_sites, :class_name => 'Site'

根据您在数据库中命名的方式,您可能还需要指定:join_table,:foreign_key或:association_foreign_key。请查看http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many的“选项”部分以获取更多信息。