首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的方法没有定义?

为什么我的方法没有定义?
EN

Stack Overflow用户
提问于 2014-07-24 19:58:51
回答 1查看 69关注 0票数 1

我试图从模型中调用视图中的方法,但是我得到了这个错误。

代码语言:javascript
复制
undefined method `titles_by_timing' for #<Class:0x0000010668db28>

我不明白为什么。我甚至不能从rails控制台调用该方法。

代码语言:javascript
复制
[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'

这是模型。

代码语言:javascript
复制
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成本”。

代码语言:javascript
复制
- 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" 

但这不重要,对吧?太令人沮丧了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-24 20:00:01

您已经将titles_by_timing定义为实例方法,并试图将其作为类方法使用,这将导致错误。

如果您计划使用它作为类方法(如DeliveryCost.titles_by_timing ),那么您应该将它定义为:

代码语言:javascript
复制
def self.titles_by_timing ## prefix with self
  self.do stuff
end

-或-

如果您希望使用titles_by_timing方法作为当前定义它的方式,即作为实例方法,那么您应该在DeliveryCost实例上调用该方法。

例如:

代码语言:javascript
复制
DeliveryCost.find(1).titles_by_timing
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24942878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档