2015-06-23 41 views
2

我有两种型号UserSite。用户具有“基本和高级”等类别。用户与站点有关系 - >很多(即一个用户可以有多个站点)。现在我想选择高级用户的网站。有人能告诉我如何使用ActiveRecord中的where子句来实现这一目标吗?活跃记录在哪里条款关系在型号

+0

是A类用户表中的列?或者类别本身不是另一种模式? –

+0

这是一个专栏。 – Vijay

+0

@Vijay是的,你也可以在网站的where子句中使用。注意:'where子句会给你一个记录集合,而不是一个记录' – Mandeep

回答

2

我要选择优质用户的网站

这将做

User.includes(:sites).where('users.category = ?', 'premium') 

更新

如果网站也有类别,如“Wordpress或joomla',我如何 适用where子句来选择付费用户

对于只有WordPress网站,你需要调整这样

User.includes(:sites).where('users.category = ? and sites.category = ?', 'premium','wordpress') 
+0

现在,如果网站也有类似“wordpress或joomla”的分类,我如何应用where子句来选择只有高级用户的wordpress网站。 – Vijay

+0

@Vijay我已经更新了我的答案。 – Pavan

+1

非常感谢您的帮助。它帮助我解决了我的问题:)。 – Vijay

0

正如你说,category是一列,所以Rails的自动为您生成以下方法:

User.find_by_category("basic") 

如果你不想使用它,你可以使用where方法,你必须发送键 - 值对类似以下内容:

User.where(:category => "basic") 

当你找到你想要的类别user,你可以简单地调用它的sites得到所有相关网站的Wi一个特定的用户。

+1

我需要选择网站。不是用户。 – Vijay

0

查询你可以试试这个也:

@user_ids = User.where(category: 'premium').pluck(:id) 
@sites = Site.where(user_id: @user_ids)