我有一个很好的功能和测试的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看起来不那么神奇。提前谢谢。
答案 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,因为作者为他们的努力获得了更多的钱,所涉及的每个人似乎都非常关心他们产品的质量。