【问题标题】:Calling a method inside model在模型内部调用方法
【发布时间】:2016-09-14 06:56:11
【问题描述】:

我试图从定义它的模型内部触发一个方法。但是当我尝试启动我的服务器时,我得到了一个“未定义的方法 `completed_mission_names'”。谁能帮我找出我做错了什么?

class MenteeProfile < ActiveRecord::Base

  # Update trackable attributes with succeeded missions
  MenteeProfile.completed_mission_names

protected

  def last_completed_mission_action
  end

  def self.completed_mission_names
  end
end

【问题讨论】:

  • 如果你在模型中调用你看到self.completed_mission_names,如果你在控制器或视图中然后MenteeProfile.completed_mission_names
  • 将调用移动到类定义的底部。或者更好,在外面。在类定义之后就可以了。在 Rails 初始化文件 (config/initializers/whatever.rb) 中调用该方法会更好(假设您要执行一次性初始化)。
  • 在 Tim mee 回答和线程共享之后,我已将我想调用的方法放入类中,效果更好。谢谢大家的回复。

标签: ruby-on-rails ruby


【解决方案1】:

最大限度地简化,您正在尝试这样做:

class A
  A.foo
  def self.foo
    puts 'Calling foo!'
  end
end

这不起作用,因为方法foo 在您尝试调用它时未定义。您必须先定义它,然后才能调用它。像这样:

class B
  def self.foo
    puts 'Calling foo!'
  end
  B.foo
end

您也可以在类定义中只调用foo 而不是B.foo。你可以在任何你喜欢的地方添加 protected 关键字,它不会对类方法产生任何影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 2015-04-23
    • 2018-12-18
    • 2021-01-05
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多