我有两个模型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
在我的模型上,一切都会因为大量错误而疯狂。我将不胜感激任何有用的建议和代码提示。答案 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的“选项”部分以获取更多信息。