如何在控制台中调用rails 3模型方法

Posted

技术标签:

【中文标题】如何在控制台中调用rails 3模型方法【英文标题】:How to call rails 3 model method in the console 【发布时间】: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 和许多其他语言/框架编写复杂的面向服务的应用程序和后端。 堆栈溢出是造成这种情况的原因。非常感谢这个社区让人们能够解决他们的问题并理解他们的解决方案。

【问题讨论】:

请告诉我们这个方法是如何定义的。 【参考方案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

【讨论】:

以上是关于如何在控制台中调用rails 3模型方法的主要内容,如果未能解决你的问题,请参考以下文章

从 Rails 3 控制器调用辅助方法

如何在 Ruby on Rails 的控制台中调用控制器/视图辅助方法?

如何在 Rails 控制器中调用通道方法?

Rails - 模型不通过方法保存属性,但如果手动分配(在控制台中)

如何将自定义视图+控制器添加到模型?

如何制作可在rails应用程序中的任何位置使用的自定义方法