2017-09-22 18 views
0

作る私はこの機能Rubyはインスタンスメソッドやクラスメソッド

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 
+0

これはhttps://codereview.stackexchange.com/に適していますが、それをどのように使いたいかという問題のほうが多いようです。あなたはあなたのKdpReportのプロパティとして、または機能的なユーティリティとしてそれをしますか?個人的には、おそらくモデルのインスタンスメソッドを使うでしょう。 – Unixmonkey

+0

属性が「存在」ですか? –

答えて

0

で試してみてください:

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

free_downloads = kdp_report_object.free_downloads 

リターンを省略することができます。

関連する問題