Ruby make实例方法或类方法

时间:2017-09-22 16:42:15

标签: ruby-on-rails

我有这个功能

 def get_free_downloads(kdp_report)
    #return 0 if no free reports found
    return (kdp_report.presence and kdp_report.transaction_type == 'Free - Promotion') ? kdp_report.downloads : 0
  end

我想将其移至模型

什么会更好,更具可读性和更多的轨道方式?

1)

class KdpReport < activeRecord::Base
  def self.get_free_downloads(kdp_report)
        return (kdp_report.presence and kdp_report.transaction_type == 'Free - Promotion') ? kdp_report.downloads : 0
   end
end

并像这样使用它:

free_downloads = KdpReport.get_free_downloads kdp_report

2)

或者像这样:

 class KdpReport < activeRecord::Base
      def get_free_downloads
            return transaction_type == 'Free - Promotion') ? downloads : 0
       end
    end

并像这样使用:

free_downloads = kdp_report.presence ? kdp_report.get_free_downloads : 0

1 个答案:

答案 0 :(得分:0)

尝试:

class Report < ApplicationRecord
  def free_downloads
    transaction_type == 'Free - Promotion' ? downloads : 0
  end
end

free_downloads = kdp_report_object.free_downloads

可以省略返回。