Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 多对多关系,rails_Ruby On Rails_Many To Many_Relationship_Subscription - Fatal编程技术网

Ruby on rails 多对多关系,rails

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

我在用户和他们订阅的频道之间有一种多对多的关系。但是,当我查看用户和用户通道之间或通道和用户通道之间的模型依赖关系时,用户和通道之间存在直接联系。如何将用户频道设置为介于1到2个频道之间? 用户模型

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更好的实践。