我如何通过一个有点属于关联的模型来确定范围?

时间:2014-09-04 23:17:03

标签: ruby-on-rails ruby ruby-on-rails-4

我无法理解如何使用与其完全无关的模型来规划孩子。主要模特是Kid,另一个是Favorite。在应用程序中,用户可以拥有最喜欢的妈妈,而孩子则属于妈妈和爸爸。爸爸妈妈不属于任何事情:

class Favorite < ActiveRecord::Base
  belongs_to :user
  belongs_to :mom
end

class Kid < ActiveRecord::Base
  belongs_to :user
  belongs_to :dad
  belongs_to :mom
end

class User < ActiveRecord::Base
  has_many :kids
  has_many :favorites
end

如您所见,收藏夹与Kid没有任何关联。我猜它会如果我喜欢上喜欢的最喜欢.kids或kid.favorites,但后者对我来说没有意义,因为我想用它做什么。

我想要做的是创建一个列出父亲的范围&#39;孩子们,但仅限于那些用户最喜欢的妈妈。如下所示:

@dad = Dad.find(params[:dad_id])
@kids = @dad.kids.current_users_favorite_moms

但是我对收藏夹开始的模型是什么?爸?妈妈?我不确定。你能帮帮我吗?

1 个答案:

答案 0 :(得分:2)

首先,我不明白KidUser之间的关系,所以我会放弃它。

我认为使用has_many :through

会更容易
class User < ActiveRecord::Base
  has_many :favorite_moms, through: :favorites, class_name: :mom
end
Class Kid < ActiveRecord::Base
  belongs_to :mom
  belongs_to :dad
end
class Favorite < ActiveRecord::Base
  belongs_to :user
  belongs_to :mom
end

然后我们会这样做

@dad = Dad.find(id)
@kids = Kid.where(dad: @dad, mom: current_user.favorite_moms)

尝试并告诉我它是否有效。