def block in rake task

前端 未结 3 571
清歌不尽
清歌不尽 2021-02-01 13:37

I got undefined local variable or method \'address_geo\' for main:Object with the following rake task. What\'s the problem with it?

include Geokit::         


        
3条回答
  •  南方客
    南方客 (楼主)
    2021-02-01 13:46

    Update: Gotcha

    This potentially adds the method to global scope and will conflict with any other method with the same name. Look at @Hula_Zell's answer https://stackoverflow.com/a/44294243/584440 for a better way.

    Original answer

    You are defining the method inside the rake task. For getting the function, you should define outside the rake task (outside the task block). Try this:

    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
    

提交回复
热议问题