如何在Ruby on Rails中将类方法链接在一起?

时间:2018-11-26 13:17:52

标签: ruby-on-rails ruby

我在Rails 5模型中得到了这个

m

有没有更优雅的方法来编写第一种方法?

最好将Array_Station_Size = m.getAttr('x', Station_Size) def self.payable open.where.not(:delivery_status => "draft") end def self.draft where(:delivery_status => "draft") end def self.open where(:payment_status => "open") end 方法链接在一起,如下所示:

open

不幸的是,这不起作用。

2 个答案:

答案 0 :(得分:1)

也许您可以使用范围?

scope :payable, -> { open.where.not(:delivery_status => "draft") }

您可以这样使用

YouModel.payable

答案 1 :(得分:1)

要链接否定查询,您可以使用以下技巧:

def self.payable
  open.where.not(id: draft)
end

如果您不在乎是否返回ActiveRecord::Relation对象,则可以使用-,它返回一个Array

def self.payable
  open - draft
end

我个人将使用scope而不是类方法来进行查询:https://guides.rubyonrails.org/active_record_querying.html#scopes。所以:

scope :draft, -> { where(:delivery_status => "draft") }
scope :open, -> { where(:payment_status => "open") }
scope :payable, -> { open.where.not(id: draft) }