控制器中的访问方法来自模型

时间:2013-02-17 16:03:04

标签: ruby-on-rails ruby methods model

刚开始使用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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

可以按照以下方式完成:

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

为了回答你的第二个问题,Rails是一个自以为是的框架,强制使控制器和表名复数化的模式。这实际上是为了更加语法正确。

如果您想调整复数,可以使用Inflections来完成。