Rails ActiveRecord has_many 的 extension 功能

oneapm · 2015年07月29日 · 最后由 oneapm 回复于 2015年07月30日 · 1905 次阅读
class Order < ActiveRecord::Base

  has_many :line_items

end

order = Order.find params[:id]

order.line_items.where("stock_count = ?", 0).size

可以改写为以下的形式:

class Order < ActiveRecord::Base

  has_many :line_items do
    def out_of_stock
      where("stock_count = ?", 0)
    end
  end

end

order = Order.find params[:id]

order.line_items.out_of_stock.size

在某些场合下,我们想在has_many的关系后执行一个自定义的方法,这个时候可以使用has_manyextension功能


本文由OneAPM工程师原创,欢迎大家来OneAPM做客,共同讨论各种技术问题,OneAPM提供包括Ruby在内的主流 6 种编程语言,以及浏览器端、移动端、服务器软硬件环境的性能监测服务。

我觉得用在 line_item 的 scope 好一些

从逻辑上说 out of stock 是跟 item 关联的,感觉应该写在 line_item 的 model 里面

#2 楼 @blacktulip #1 楼 @jxs471494539

你们说的都对,这里只是演示一下这个 extension,例子不太好啊,😄

需要 登录 后方可回复, 如果你还没有账号请 注册新账号