Rails 3:可选 has_one 关联的范围

发布于 2024-11-26 00:57:37 字数 397 浏览 1 评论 0原文

我有两个模型:销售和付款

class Sale < ActiveRecord::Base
  has_one :payment
end

class SaleCancelation < ActiveRecord::Base
  belongs_to :payment
end

我想创建两个范围,“付款”和“不付款”。

“with_ payment”工作起来很简单:

class Sale < ActiveRecord::Base
  scope :with_payment, joins( :payment )
end

但是我如何创建一个范围来查找没有有关联付款的每笔销售?

I have two models: Sale and Payment

class Sale < ActiveRecord::Base
  has_one :payment
end

class SaleCancelation < ActiveRecord::Base
  belongs_to :payment
end

I want to create two scopes, "with payment" and "without payment".

"with_payment" works easyly:

class Sale < ActiveRecord::Base
  scope :with_payment, joins( :payment )
end

But how can I create a scope that finds every sale that does not have an associated Payment?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

末骤雨初歇 2024-12-03 00:57:37

怎么样:

scope :without_payment, where( 'id not in (select sales_id from payments)' )

How about:

scope :without_payment, where( 'id not in (select sales_id from payments)' )
瑶笙 2024-12-03 00:57:37

另一种方法:

scope :without_profile, lambda { includes(:user_profile).where('user_profiles.id is null') }

Another way to do it:

scope :without_profile, lambda { includes(:user_profile).where('user_profiles.id is null') }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文