我的控制器中有一个实例变量,我试图将其转换为我的模型的范围。
实例变量:产品
@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)}
它似乎无法识别关联或允许"!="在范围内。
任何想法或指示?
答案 0 :(得分:0)
以下代码将返回与user
和asset_type
Product.joins(:user, :asset_type)
排除allow_multi_users
设置为true
Product.where(allow_multi_users: false)
要获取asset_type.name
为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