如何从模型中调用方法?

时间:2014-03-19 15:23:22

标签: ruby-on-rails ruby methods model call

我试图用我的模型调用方法:

<p>
<strong>Holidays this year:</strong>
<%= Country.all_holidays_in(2014) %>
</p>

我也尝试将我的方法放在我的控制器中,但它不会起作用。 但我得到这个错误:

NoMethodError in Countries#show

Showing C:/xampp/htdocs/fluxcapacitor/app/views/countries/show.html.erb where line #15 raised:

undefined method `all_holidays_in' for Country(id: integer, name: string, countrycode: string):Class

这是我的模特:

class Country < ActiveRecord::Base

  has_and_belongs_to_many :groups

  validates :name, presence: true 
  validates :countrycode, presence: true

  def all_holidays_in(y)                                
    from = Date.civil(y,1,1)                                                            
    to = Date.civil(y,12,31)                                                            
    return Holidays.between(from, to, self.countrycode)                                     
   end
end

任何想法我怎么称呼它?

1 个答案:

答案 0 :(得分:5)

def self.all_holidays_in(y)                              #
    from = Date.civil(y,1,1)                                                            #
    to = Date.civil(y,12,31)                                                            #
    return Holidays.between(from, to, self.countrycode)                                     
end

你需要通过self.method_name

使它成为一个类方法 事实上,这是行不通的,没有注意到国家代码。保持方法不变,但您需要国家/地区的实例来调用它。

所以如果在你的控制器中你有

@country = Country.first

然后你可以做

@country.all_holidays_in(2014)

使用您当前的方法。