2014-09-04 28 views
0

我无法理解我将如何使用与其没有完全关联的模型对儿童进行范围。主要模型是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 

正如你所看到的,最喜欢的没有任何关联的孩子。我猜如果我把它做成像favorite.kids或kid.favorites那样通过对方,但后者对我来说没有意义,因为我想用它做什么。

我想要做的是创建一个列出父亲的孩子,但只为那些是用户最喜爱的妈妈的范围。所以像这样:

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

但是哪个模型,我开始收藏夹?爸?妈妈?我不确定。你可以帮帮我吗?

+0

所以最主要的是一个孩子,他有一个爸爸,一个妈妈,还有一个最喜欢的妈妈?什么是用户? – 2014-09-04 23:28:27

+0

@MohammadAbuShady我编辑了我的问题以包含'User'模型。是的,孩子是主要的东西。 – user2784630 2014-09-04 23:31:18

回答

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) 

试试吧,告诉我,如果它的工作会更容易些。

+0

谢谢。只需要将'class_name:'Mom''改成'source::mom'。我猜是因为我正在使用'rails 4.1.1'。 – user2784630 2014-09-06 01:18:58

+0

好吧,我已经解决了我的答案,很高兴它为你工作 – 2014-09-06 11:11:27

相关问题