2014-07-24 3 views
1

나는 모델에서보기에서 메소드를 호출하려고하지만메쏘드가 정의되지 않은 이유는 무엇입니까?

undefined method `titles_by_timing' for #<Class:0x0000010668db28> 

내가 왜 얻을 그나마이 오류가 발생합니다. 레일 콘솔에서 메서드를 호출 할 수도 없습니다.

[6] pry(main)> DeliveryCost.titles_by_timing 
NoMethodError: undefined method `titles_by_timing' for #<Class:0x00000106f397b8> 
from /Users/user/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.4/lib/active_record/dynamic_matchers.rb:22:in `method_missing' 

다음은 모델입니다.

class DeliveryCost < ActiveRecord::Base 

    before_destroy :survive_if_jobs 

    has_many :job_delivery_costs 
    has_many :jobs, through: :job_delivery_costs 

    def titles_by_timing 
    self.do stuff 
    end 

    private 

    def survive_if_jobs 
    jobs.empty? 
    end 

end 

내가 직접 모델이나 컨트롤러에 해당하지 않는에서 호출하려고 뷰는 자사의 소위 'Job_delivery은 비용'.

- jdc_array = (@job.job_delivery_costs.any? ? [@job.job_delivery_costs,@job_delivery_cost].flatten : [@job_delivery_cost]) 
      - jdc_array.each do |jdc| 
       = simple_form_for [:admin, @job, jdc] do |f| 
       - if jdc.new_record? 
        %tr 
        %td 
         = f.input :delivery_cost_id, collection: DeliveryCost.order(:timing), :label_method => :timing, :value_method => :id, label: false 
        %td 
         = f.select :title, grouped_options_for_select(DeliveryCost.titles_by_timing) 
        %td 
         = f.input :cost_per_unit, label: false 
        %td 
         = f.input :hour_count, label: false 
        %td 
         = f.input :quantity, label: false 
        %td 
         = f.submit "Add", class: "btn btn-s btn-default" 

하지만 그건 중요하지 않아야합니까? 너무 초조해.

답변

6

당신은 인스턴스 메소드titles_by_timing을 정의하고, 오류의 원인이되는 클래스 메소드로 사용하려고합니다.

당신은 DeliveryCost.titles_by_timing 같은은 다음으로 정의되어야 클래스 메소드로 사용하려는 경우 :

def self.titles_by_timing ## prefix with self 
    self.do stuff 
end 

- 또는

당신이로 titles_by_timing 방법을 사용하고자하는 경우 방법이 정의되어 있습니다. 예를 들어, 인스턴스 메소드으로 호출하면 DeliveryCost의 인스턴스에서 메소드를 호출해야합니다.

예 :

DeliveryCost.find(1).titles_by_timing 
관련 문제