0

刚开始使用 Rails,想知道如何访问我的模型中的方法。

在控制器中,我尝试以下操作: @testString = Work.testMethod

class Work < ActiveRecord::Base<br>
  def testMethod
    return "string from test method"
  end
end

这会导致“WorksController#index 中的 NoMethodError”(未定义的方法)。我将不胜感激。

而且..为什么在脚手架“工作”时rails会在控制器名称后附加一个“s”?模型名称是 Work,控制器是:works_controller

4

2 回答 2

0

使用self

class Work < ActiveRecord::Base
   MY_MESSAGE = "ALL THE BEST"

   def self.testMethod
     return "string from test method"
   end
end

self用于调用类级别的方法。现在您可以在任何地方调用它,如下所示:

Work.testMethod #=> "string from test method"
Work::MY_MESSAGE #=> "ALL THE BEST"

如果您使用instance_level需要创建实例的方法,class那么您可以在对象上调用方法。但是模型实例是在您想要创建新记录时创建的,所以我更喜欢self在您不想创建记录时使用方法。

如果您有记录,您可以调用:

 class Work < ActiveRecord::Base
   def testMethod
     return "string from test method"
   end
end

work_record = Work.find(your_condition)
work_record.testMethod
于 2013-02-17T16:06:02.950 回答
0

您所说的概念是引入一种class方法。该方法需要在关键字Work的帮助下在类本身上定义。self

可以按如下方式完成:

class Work < ActiveRecord::Base
   def self.testMethod
     return "string from test method"
   end
end

要回答您的第二个问题,Rails 是一个固执己见的框架,它强制采用复数您的控制器和表名称的模式。这确实是为了在语法上更正确。

如果您想调整复数形式,可以使用Inflections来实现。

于 2013-02-17T16:09:46.947 回答