Ruby on rails 多对多关系,rails
我在用户和他们订阅的频道之间有一种多对多的关系。但是,当我查看用户和用户通道之间或通道和用户通道之间的模型依赖关系时,用户和通道之间存在直接联系。如何将用户频道设置为介于1到2个频道之间? 用户模型Ruby on rails 多对多关系,rails,ruby-on-rails,many-to-many,relationship,subscription,Ruby On Rails,Many To Many,Relationship,Subscription,我在用户和他们订阅的频道之间有一种多对多的关系。但是,当我查看用户和用户通道之间或通道和用户通道之间的模型依赖关系时,用户和通道之间存在直接联系。如何将用户频道设置为介于1到2个频道之间? 用户模型 class User < ActiveRecord::Base acts_as_authentic ROLES = %w[admin moderator subscriber] has_and_belongs_to_many :channels has_many :ch
class User < ActiveRecord::Base
acts_as_authentic
ROLES = %w[admin moderator subscriber]
has_and_belongs_to_many :channels
has_many :channel_mods
named_scope :with_role, lambda { |role| {:conditions => "roles_mask & #{2**ROLES.index(role.to_s)} > 0 "} }
def roles
ROLES.reject { |r| ((roles_mask || 0) & 2**ROLES.index(r)).zero? }
end
def roles=(roles)
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
end
def role_symbols
role.map do |role|
role.name.underscore.to_sym
end
end
end
class用户“角色{u掩码&{2**roles.index(role.to_s)}>0”}
def角色
ROLES.reject{| r |((ROLES|u mask | 0)&2**ROLES.index(r)).zero}
结束
def角色=(角色)
self.roles_mask=(roles&roles).map{r | 2**roles.index(r)}.sum
结束
定义角色符号
role.map do | role|
role.name.下划线.to_sym
结束
结束
结束
渠道模型
class Channel < ActiveRecord::Base
acts_as_taggable
acts_as_taggable_on :tags
has_many :messages
has_many :channel_mods
has_and_belongs_to_many :users
end
class UsersChannels < ActiveRecord::Base
end
class频道
UsersChannel模型
class Channel < ActiveRecord::Base
acts_as_taggable
acts_as_taggable_on :tags
has_many :messages
has_many :channel_mods
has_and_belongs_to_many :users
end
class UsersChannels < ActiveRecord::Base
end
class UsersChannels
请参阅引导您通过配置与干预模型有许多关系的在线指南。请参阅引导您通过配置与干预模型有许多关系的在线指南。HABTM关系自动神奇地生成UsersChannels-如果要访问链接表的模型(向其添加更多属性,例如-time\u channel\u wasted或其他),则必须将模型更改(并明确定义并迁移属性id为:primary\u key、user\u id:integer、channel\u id:integer的UsersChannel模型)为:
class频道:销毁
拥有多个:用户,:通过=>:用户\u频道
结束
类用户:销毁
拥有多个:频道,:至=>:用户\u频道
结束
类UsersChannels
注意:由于您正在定义自己的链接模型,因此不必使用HABTM定义的表名UsersChannels,您可以将模型名更改为类似“watchs”的名称。以上所有内容都在前面提到的Rails指南中进行了详细介绍。HABTM关系神奇地自动生成UsersAnnels-如果您想访问链接表的模型(添加更多属性,例如-time\u channel\u watched或其他),您必须更改模型(并显式定义并迁移属性为id:primary\u key、user\u id:integer、channel\u id:integer的UsersChannel模型)到:
class频道:销毁
拥有多个:用户,:通过=>:用户\u频道
结束
类用户:销毁
拥有多个:频道,:至=>:用户\u频道
结束
类UsersChannels
注意:由于您正在定义自己的链接模型,因此不必使用HABTM定义的表名UsersChannels-您可以将模型名更改为类似“watchs”的名称。以上所有内容几乎都在提到的Rails指南中。谢谢,你能不能给我指个地方,让我看看如何使用控制器和视图创建这些连接?谢谢,你能不能给我指个地方,让我看看如何使用控制器和视图创建这些连接?使用hmt而不是habtm更好的实践e、 使用hmt胜过habtm更好的实践。