0

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

实例变量:products

@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且类型为"Computer"的所有产品。它还排除了user_id:nilallow_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)}

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

任何想法或指示?

4

1 回答 1

0

以下代码将返回与 auser和 an关联的产品asset_type

Product.joins(:user, :asset_type)

排除allow_multi_users设置为的产品true

Product.where(allow_multi_users: false)

要获取产品 where asset_type.nameis computer,假设您遵循约定并且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
于 2014-04-23T02:49:55.580 回答