簡體   English   中英

如何使新創建的方法在Rails控制台中工作

[英]How Do I get a newly created method to work in the rails console

我在其中一個模型中創建了一個相當簡單的新方法。 但是,當我進入Rails控制台進行測試時,出現以下錯誤:

NoMethodError: undefined method 'get' for #<Class:0x3a5032fc>

我已經保存了代碼,關閉了Rails控制台,然后重新啟動,但是我仍然得到NoM​​ethod

class Race <ActiveRecord::Base
  def get(race_date,track_name,race_number)
    Race.where(:date =>race_date, :race_nbr => race_number, :track_id => (Track.where(:track_code => track_name)))
  end
end

在控制台中,輸入以下內容:

Race.get("2011-12-04", "BEL", 1)

產生NoMethodError:undefined method 'get'

任何想法將不勝感激。

您定義了Race類的實例方法。 也許您會定義一個類方法,例如:

def self.get(race_date, track_name, race_number)
    track = Track.where(:track_code => track_name)
    Race.where(:date => race_date, :race_nbr => race_number, :track_id => track)
end

然后,您可以使用Race.get

@lucapette正確了; 您需要創建一個類方法。 下面是定義類方法的另一種方法。 在定義大量類方法的大型項目中,這可能是一種組織代碼的更簡潔的方法,但是這種觀點純粹是主觀的。

class << self
  def get(race_date,track_name,race_number)
    Race.where(:date => race_date, 
               :race_nbr => race_number, 
               :track_id => (Track.where(:track_code => track_name)))
  end
end

class << self定義的所有內容都將成為一個類方法。

另一種選擇是使用范圍。

scope :get, 
      lambda { |race_date, track_name, race_number| 
               Race.where(:date => race_date, 
                          :race_nbr => race_number, 
                          :track_id => (Track.where(:track_code => track_name))) }

最后一個解決方案作為范圍看起來有點笨拙,因此在這種情況下最好使用類方法代替范圍。 另外,我更喜歡具有描述性名稱的作用域,但是我想這也將適用於方法名稱。

經過兩個很好的回答,我覺得應該說些別的話:

如果您的控制台已經啟動,它不會猜測您已經添加了一些代碼,因此您必須重新加載。

這樣做,只需鍵入:

reload!

在控制台中(無需CTRL-C)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM