Rails不是魔术,方法在哪里生活?

时间:2010-11-10 07:24:29

标签: ruby-on-rails methods

我有一个很好的功能和测试的Ruby代码,我想集成到rails项目中:

require 'open-uri'

def shorten(url)
  open("http://is.gd/api.php?longurl=#{url}").read
rescue
  nil
end

我想通过以下方式从show.html.erb调用方法缩短(url):

<% @shorturl = shorten("http://www.google.com/search?q=#{@bands.item.gsub(' ', '+')}+san+francisco") %>

我认为放置方法缩短,在模型中会起作用但会导致 NoMethodError (require'open-uri'放在application_controller.rb中)

undefined method `shorten' for #<ActionView::Base:0x1037e66a8>

这种方法应该在哪里生活?我怎样才能让它发挥作用?你推荐什么书或资源会使Rails看起来不那么神奇。提前谢谢。

3 个答案:

答案 0 :(得分:3)

我的经验是:如果该方法处理数据库数据,最好将其移至Model。即使它是关于处理来自数据库数据的数据,也建议尽可能将其移入模型中,以便尽可能使用“精益控制器”和“精益视图”。

如果该方法通常用于帮助显示某些内容,那么它属于“帮助者”...例如,h方法是“帮助查看代码”的典型示例。您可以将此类方法添加到应用程序帮助程序文件,即app/helpers/application_helpers.rb

如果它不处理视图而不处理数据库中的数据,那么您可能会认为它是该控制器类的方法,甚至是应用程序控制器的方法,如果它对您的应用程序非常重要,应该被所有控制者继承。

答案 1 :(得分:2)

好吧,如果它是一个属于模型的方法,无论是类方法还是实例方法:

班级方法

#some controller
MyModel.method(...)

#MyModel
def self.method(...)
  ...
end

实例方法

#some controller
@myInstance = MyModel.find...(...)
@myInstance.method(...)

#MyModel
def method(...)
  ...
end

如果没有放入任何型号,我推荐像动静能量这样的帮手。

答案 2 :(得分:0)

动静能量的答案非常好所以我只想补充一点,如果你想学习一些rails,请查看这个免费的在线教程,它将带你逐步建立一个Twitter克隆:http://railstutorial.org/book

我读过的几本书首先说要学习Rails(包括上面的链接),但我认为这是一个可怕的想法,真的,非常糟糕的建议。如果你不理解Ruby那么你就无法理解什么是Rails“魔术”以及什么只是标准的Ruby。

所以我的建议是先学习Ruby然后学习Rails。它将不那么令人沮丧和神奇的看似。以下是我最喜欢的Ruby书籍:

Programming Ruby 1.9
Metaprogramming Ruby
Refactoring: Ruby Edition

我喜欢Pragmatic,因为作者为他们的努力获得了更多的钱,所涉及的每个人似乎都非常关心他们产品的质量。