1)用户可以有很多原因,原因可能属于许多用户。

2)用户可以拥有许多广告系列,并且广告系列可以属于许多用户。竞选活动属于一个原因。

我希望能够单独地为给定的用户分配原因或广告系列。因此可以为用户分配特定的广告系列。或者可以为用户分配一个原因,然后应与用户关联该原因的所有活动。

那可能吗?我可以设置它,以便可以像这样简化关系:

用户 =属于用户的所有原因

用户 =所有属于用户的广告系列,无论是通过因果协会还是广告系列协会

有帮助吗?

解决方案

我相信您应该使用以下内容:

class User < ActiveRecord::Base
   has_and_belongs_to_many :causes
   has_and_belongs_to_many :campaigns
end

class Cause < ActiveRecord::Base
   has_and_belongs_to_many :users
   has_many :campaigns
end

class Campaign < ActiveRecord::Base
   has_and_belongs_to_many :users
   belongs_to :cause
end

这样您可以使用

User.causes
User.campaigns

Cause.campaing
Cause.users

Campaign.users
Campaign.cause

你可以阅读 这里 关于 has_and_belongs_to_many 关系, 这里 关于 has_one这里 关于 belongs_to.

让我知道这是否是您想要的:

编辑:

“我仍然需要用户。

您可以在用户模型上使用一个返回所有广告系列的方法。这样的事情:

def all_campaigns
   self.campaigns + self.causes.collect{ |c| c.campaigns }
end

其他提示

这应该起作用。

class User < ActiveRecord::Base
  has_many :causes, :through => :cause_users
  has_many :campaigns, :through => :campaign_users
  # other model stuff

class Cause < ActiveRecord::Base
  has_many :users, :through => :cause_users
  has-many :campaigns
  # other model stuff

class Campaign < ActiveRecord::Base
  belongs_to :cause
  has_many :users, :through => :campaign_users
  # other model stuff

class CampaignUser < ActiveRecord::Base
  belongs_to :campaign
  belongs_to :user
  # other model stuff

class CauseUser < ActiveRecord::Base
  belongs_to :cause
  belongs_to :user
  # other model stuff

HAS_MANY:通过要求您为每个连接创建一个新模型:竞选_users和cause_users,如所示,但比HAS_AND_AND_BELONGS_TO_MANY在以后提供的功能更多。

我还建议使用比:竞选_users和:casues_users更好的名称,使关系更有意义。

您可以制作:HAS_MANY:通过使用JOIN模型以及用户和使用另一个Join模型的用户和原因之间的广告系列之间的关联。您可以在原因模型中制作一个:has_many:广告系列协会,将一个:属于:属于活动模型中的原因。

但是您将无法通过用户来获取所有用户广告系列或原因。您应该对用户进行迭代。甚至可以使用连接和条件进行自定义SQL查询,以过滤连接中的信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top