Ruby on rails 在种子文件中创建Rails期间防止API调用
我有一个rails模型,它使用geokit,其中包括行Ruby on rails 在种子文件中创建Rails期间防止API调用,ruby-on-rails,ruby-on-rails-3,api,geokit,Ruby On Rails,Ruby On Rails 3,Api,Geokit,我有一个rails模型,它使用geokit,其中包括行acts\u as\u mappable:auto\u geocode=>true,它在验证之前调用类似:geocode\u address,:on=>:create。然而,我的问题是,我的开发数据库有一个seeds文件,它调用th Rails模型,然后在create上调用它,create调用外部API,当我没有连接到internet时失败。我有什么办法 如果该方法同时涵盖了这两种情况以及我运行测试时的情况,那就太好了,但是我已经有了一个解决
acts\u as\u mappable:auto\u geocode=>true
,它在验证之前调用类似:geocode\u address,:on=>:create
。然而,我的问题是,我的开发数据库有一个seeds文件,它调用th Rails模型,然后在create上调用它,create调用外部API,当我没有连接到internet时失败。我有什么办法
如果该方法同时涵盖了这两种情况以及我运行测试时的情况,那就太好了,但是我已经有了一个解决测试问题的方法,这不是很好。您可以尝试以下方法:
# /db/seeds.rb
ModelName.class_eval { acts_as_mappable(:auto_geocode => false) }
# Create seed models...
ModelName.class_eval { acts_as_mappable(:auto_geocode => true) }
这甚至可能奏效
ModelName.acts_as_mappable(:auto_geocode => false)
编辑:
另一种解决方案是skip_callback
方法:
ModelName.skip_callback(:validation, :before, :auto_geocode_address)
所以我会把第一行放在development.rb文件的顶部,最后一行放在底部,如果这是我创建种子模型时所说的话?如果是这样,那就不行了。我认为,问题在于它命中了模型,并且使用了默认值true。将这些代码行放在
seeds.rb
文件的顶部和底部,放在创建不想自动地理编码的模型的代码周围。我将把文件名添加到代码示例的顶部。它仍然不起作用。我将仔细考虑一下这个总体思路。尝试在agency上调用acts\u as\u mappable
,例如:agency.acts\u as\u mappable(:auto\u geocode=>false)
其中agency是一个已设置的局部变量。我得到未定义的方法
作为#``的_可映射`。我认为打开类并修改它是一种很好的方法,但不确定如何执行它。请尝试Agency.acts\u as\u mappable(:auto\u geocode=>false)
。您需要在模型类上调用acts\u as\u mappable
,而不是模型的实例。