gpt4 book ai didi

ruby-on-rails - rails : How to define a function in a rake task

转载 作者:数据小太阳 更新时间:2023-10-29 08:20:07 25 4
gpt4 key购买 nike

在我的任务文件post.rake中,我想重用一个函数

  def save_post(title, href, source)
post = Post.new(title: title, url: href, source: source)
if post.save
puts title + 'saved'
else
puts title + 'not saved'
end
end

但是,当我在这个文件中定义它并重新使用它时,它返回

NoMethodError: undefined method `save_post' for main:Object

post.rake 看起来像这样:

task :fetch_post => :environment do
require 'nokogiri'
require 'open-uri'

url = 'http://example.com'
doc = Nokogiri::HTML(open(url) )
puts doc.css("title").text
doc.css(".a").each do |item_info|
title = item_info.text
href = item_info['href']
save_post(title, href)
end

def save_post(title, href)
post = Post.new(title: title, url: href)
if post.save
puts title + 'saved'
else
puts title + 'not saved'
end
end
end

内容抓取部分有效。我只是将保存后的代码移出,想将方法抽象出来。

我应该把 def 方法放在哪里?

最佳答案

如果您在 rake 任务中定义方法,它们就可以全局访问,这可能会产生不良副作用。一种更简洁的方法是使用内联 lambda(或将方法移动到应用程序中的某个类)

task :fetch_post => :environment do
require 'nokogiri'
require 'open-uri'

save_post = ->(title, href) {
post = Post.new(title: title, url: href)
if post.save
puts title + 'saved'
else
puts title + 'not saved'
end
}

url = 'http://example.com'
doc = Nokogiri::HTML(open(url) )
puts doc.css("title").text
doc.css(".a").each do |item_info|
title = item_info.text
href = item_info['href']
save_post.call(title, href)
end

end

关于ruby-on-rails - rails : How to define a function in a rake task,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26083435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com