积极记录模型中关系的条款

时间:2015-06-23 07:27:12

标签: ruby-on-rails activerecord

我有两个模型UserSite。用户具有“基本和高级”类别。用户与网站1有关 - >许多(即一个用户可以拥有多个站点)。现在我想选择高级用户的网站。有人能告诉我如何使用ActiveRecord中的where子句来实现这个目标吗?

3 个答案:

答案 0 :(得分:2)

  

我想选择高级用户的网站

这样做

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

<强> 更新

  

如果网站也有类似'wordpress或joomla'的类别,我该怎么做   apply where子句仅选择高级用户的wordpress站点

为此你需要像这样调整查询

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

答案 1 :(得分:0)

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

User.find_by_category("basic")

如果您不想使用此方法,可以使用where方法,您必须在其中发送键值对,如下所示:

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

如果您找到了所需类别的user,则只需在其上调用sites即可获得特定用户的所有关联网站。

答案 2 :(得分:0)

你也可以试试这个:

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