我在下面的任务中得到了undefined local variable or method 'address_geo' for main:Object分.有什么问题吗?

include Geokit::Geocoders

namespace :geocode do
  desc "Geocode to get latitude, longitude and address"
  task :all => :environment do
    @spot = Spot.find(:first)
    if @spot.latitude.blank? && !@spot.address.blank?
      puts address_geo
    end

    def address_geo
      arr = []
      arr << address if @spot.address
      arr << city if @spot.city
      arr << country if @spot.country
      arr.reject{|y|y==""}.join(", ")
    end
  end
end

推荐答案

更新:明白了

这可能会将该方法添加到全局范围,并将与具有相同名称的任何其他方法冲突.看看@Hula_Zell的答案https://stackoverflow.com/a/44294243/584440,可以找到更好的方法.

Original answer

您正在rake任务中定义方法.为了获得函数,应该在rake任务之外(任务块之外)定义.试试这个:

include Geokit::Geocoders

namespace :geocode do
  desc "Geocode to get latitude, longitude and address"
  task :all => :environment do
    @spot = Spot.find(:first)
    if @spot.latitude.blank? && !@spot.address.blank?
      puts address_geo
    end
  end

  def address_geo
    arr = []
    arr << address if @spot.address
    arr << city if @spot.city
    arr << country if @spot.country
    arr.reject{|y|y==""}.join(", ")
  end
end

Ruby-on-rails相关问答推荐

Rails 7涡轮框架和多种形式与形式值有关

Rails 7,返回具有两个单独条件的活动记录关联,一个在父级,一个在子级

无法在 Rails 中使用 wkhtmltopdf 写入临时文件

Ruby/Rails 相当于 Python 的 sys.addAuditHook

`ActionController::API` 祖先类在加载后不会更新

使用带有 Paper Trail gem 的子类

Rails 使用多个外键创建/构建

Rails 7 共享刺激控制器功能

ruby on rails 中的自定义关联

如何使用 Vim 插入 ERB 标签?

设计自定义路由和登录页面

如何使用 Ruby 在现有 PDF 上编辑或书写?

如何在 Ruby on Rails 的内存缓存存储中列出键?

通过 Ruby 或 Rails 的 LDAP

从 Rails 中的控制器调用辅助方法时出现未定义的方法

Rspec:如何在控制器规范中分配实例变量

错误:无法构建 gem 原生扩展 - 安装 mysql2 时出错

RoR select_tag 默认值和选项

如何在 Ruby 类/模块命名空间中翻译模型?

Rails:您已经激活了 rake 10.3.1,但您的 Gemfile 需要 rake 10.2.2 (Gem::LoadError)