Ruby on rails rails 4具有不相等和关联的作用域

Ruby on rails rails 4具有不相等和关联的作用域,ruby-on-rails,associations,scopes,Ruby On Rails,Associations,Scopes,我的控制器中有一个实例变量,我正试图将其转换为模型的作用域 实例变量: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值不同于us

我的控制器中有一个实例变量,我正试图将其转换为模型的作用域

实例变量: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”。它还排除了用户id:nil允许多用户属性设置为TRUE的任何产品

我已经尝试了以下零运气:Products.rb

scope :with_user_differences, -> { where(last_user != user.username && asset_type.name == "Computer" unless user.nil? or allow_multi_users == true)}
它似乎无法识别关联或在范围中不允许“!=”


有什么想法或建议吗?

以下代码将返回与
用户
资产类型

Product.joins(:user, :asset_type)
要排除
允许多用户
设置为
true的产品

Product.where(allow_multi_users: false)
若要获取
asset\u type.name
computer
的产品,假设您遵循约定且
asset\u type
位于名为
asset\u 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

在第一个版本中,您使用的是
where{
,在第二个版本中,您使用的是
where(
。在你的范围内,你肯定做不到你想做的事。谢谢,但我已经意识到它做不到,因为它不起作用。关于正确的方法有什么提示吗?如果你认为我的评论没有帮助,我很抱歉。我想它会帮助你了解为什么它不起作用。我在那里放了一个链接,在试图重写y时可能会有所帮助我们的查询。您错过了
asset\u type.name==“computer”
条件