【问题标题】:How to call rails 3 model method in the console如何在控制台中调用rails 3模型方法
【发布时间】:2011-06-14 08:38:14
【问题描述】:

我有一个使用 nokogiri 解析 XML 的 rails 3 模型中的方法。 如何在控制台中调用此方法以对其进行测试。

这是整个班级(我正在尝试调用 generate_list):

class Podcast < ActiveRecord::Base

validates_uniqueness_of :name

serialize :hosts

def generate_list

# fetch the top 300 podcasts from itunes
itunes_top_300 = Nokogiri.HTML(open("http://itunes.apple.com/us/rss/toppodcasts/limit=300/explicit=true/xml"))

# parse the returned xml
itunes_top_300.xpath('//feed/entry').map do |entry|
  new_name = entry.xpath("./name").text
  podcast = Podcast.find(:all, :conditions => {:name => new_name})
  if podcast.nil?
    podcast = Podcast.new(
      :name => entry.xpath("./name").text,
      :itunesurl => entry.xpath("./link/@href").text,
      :category => entry.xpath("./category/@term").text,
      :hosts => entry.xpath("./artist").text,
      :description => entry.xpath("./summary").text,
      :artwork => entry.xpath("./image[@height='170']").text      
    )
    podcast.save
  else
    podcast.destroy
  end
end

end

end

编辑:哇,1000 次观看。我希望这个问题对人们的帮助和对我的帮助一样多。当我回顾这一点时,我感到很惊讶,一年多以前,我无法弄清楚实例方法和类方法之间的区别。现在我正在用 ruby​​、Rails 和许多其他语言/框架编写复杂的面向服务的应用程序和后端。 堆栈溢出是造成这种情况的原因。非常感谢这个社区让人们能够解决他们的问题并理解他们的解决方案。

【问题讨论】:

  • 请告诉我们这个方法是如何定义的。

标签: ruby-on-rails methods console


【解决方案1】:

看起来您想将其用作类方法,因此您必须像这样定义它:

def self.generate_list
  ...
end

那么您可以将其称为Podcast.generate_list

【讨论】:

  • 谢谢,这正是我想要的。
  • 如果方法接受参数怎么办?
  • @bcackerman 然后调用它,但是你会调用一个带参数的方法:Podcast.generate_list(arg1, arg2)
  • 谢谢!修改代码后一定要reload!
【解决方案2】:

从您的代码看来,您的 generate_list 方法实际上构建了 Podcast 并保存了它?

启动 rails 控制台: $ rails console

并创建一个新的 Podcast,调用它上面的方法:

> pod = Podcast.new
> pod.generate_list

【讨论】:

  • 或者像其他人用def self.generate_list提到的那样将其转换为实例方法
  • 这完全正确。确保“重新加载!”如果您更改代码。自己。对我没用。
【解决方案3】:

或者,如果您不想重写代码,请按照此操作。

在终端输入rails c打开控制台,然后执行:

p = Podcast.new
p.generate_list

【讨论】:

    【解决方案4】:

    这是一个实例方法,所以试试:

    Podcast.first.generate_list
    

    你应该通过如下声明来创建一个类方法:

    def self.generate_list
    

    并称它为:

    Podcast.generate_list
    

    【讨论】:

      猜你喜欢
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多