rails 4范围与NOT相等和关联

时间:2014-04-23 01:25:35

标签: ruby-on-rails associations scopes

我的控制器中有一个实例变量,我试图将其转换为我的模型的范围。

实例变量:产品

@products_with_user_differences = Product.where{|p| p.last_user != p.user.username && p.asset_type.name == "Computer" unless p.user.nil? or p.allow_multi_users == true}

说明:

这会显示所有 last_user 值与 user.username 不同的产品,其类型为"计算机" 。它还排除 user_id: nil allow_multi_users 属性设置为 TRUE 的任何产品。

我以零运气尝试了以下内容:Products.rb

scope :with_user_differences, -> { where(last_user != user.username && asset_type.name == "Computer" unless user.nil? or allow_multi_users == true)}

它似乎无法识别关联或允许"!="在范围内。

任何想法或指示?

1 个答案:

答案 0 :(得分:0)

以下代码将返回与userasset_type

相关联的产品
Product.joins(:user, :asset_type)

排除allow_multi_users设置为true

的产品
Product.where(allow_multi_users: false)

要获取asset_type.namecomputer的产品,假设您遵循惯例,并且asset_type位于名为asset_types

的表格下
# take note of the pluralized asset_type
Product.where(asset_types: { name: 'Computer' })

获取last_user不等于关联用户的用户名

的产品
Product.where('products.last_user != users.username')

鉴于所有这些,您可以执行以下操作

def self.with_user_differences
  Product
    .joins(:user, :asset_type)
    .where(assset_types: { name: 'Computer' })
    .where(allow_multi_users: false)
    .where('products.last_user != users.username')
end