我试图从模型中调用视图中的方法,但是我得到了这个错误。
undefined method `titles_by_timing' for #<Class:0x0000010668db28>我不明白为什么。我甚至不能从rails控制台调用该方法。
[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" 但这不重要,对吧?太令人沮丧了。
发布于 2014-07-24 20:00:01
您已经将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_timinghttps://stackoverflow.com/questions/24942878
复制相似问题