2015-11-29 82 views
-7

我的任務是一個類的方法添加到Profile類上的方法,稱爲get_all_profiles,其中:調用類對象

  • 接受的出生年份最低和最高

  • 問題在WHERE子句BETWEEN SQL子句來定位Profile s的出生年份是今年最小和最大年份之間

  • 捍衛自己免受SQL注入時應用躺在參數 的SQL子句

  • 返回型材在ASC出生年份順序集合

我認爲下面的實施是正確的,但我怎麼能稱之爲類對象(即Profile.get_all_profiles?(min, max))?

def get_all_profiles(start_year, end_year) 
    Profile.where(:birth_year => start_year..end_year).order(:birth_year) 
end 
+0

前段時間有同樣的問題 – potashin

+2

你錯過了他們所說的添加**類**方法的關鍵部分。您必須將其定義爲'def self.get_all_profiles(start_year,end_year)',那麼您可以將它稱爲'Profile.get_all_profiles(...)'。確保你閱讀了關於實例方法和類方法之間差異的講義。 – sjagr

回答

1

爲了實現這一點作爲一個類的方法,你可以寫上面的方法爲:

def self.get_all_profiles(start_year, end_year) 
    Profile.where(:birth_year => start_year..end_year).order(:birth_year) 
end 

,或者

class << self 

    def get_all_profiles(start_year, end_year) 
    Profile.where(:birth_year => start_year..end_year).order(:birth_year) 
    end 

    ... other class methods ... 

end 

所以,你就可以稱其爲:

Profile.get_all_profiles(start_year, end_year) 
+1

謝謝所有回覆def self.get_all_profiles(start_year,end_year) where(birth_year:start_year..end_year).order(:birth_year) end working for me –