正如标题所说,我的应用程序中有一个简单的ActiveResource应该从api获取数据。该集合在本地和生产服务器上都可以完美地运行。但是,.find在生产中不起作用,我得到一个奇怪的错误:
MyResource.find(1, params: { website_id: 2 })
ArgumentError: wrong number of arguments (given 2, expected 0..1)
如果我从连接到api的本地控制台运行它,则相同的查询有效。 API返回有效的响应。我不知道如何调试它。
class MyResource < ActiveResource::Base
self.site = Rails.configuration.content_url
self.prefix = "/api/websites/:website_id/"
self.element_name = "game"
end
我不得不说,我在应用程序中有其他资源使用相同的api,find方法适用于它们,只有这个有问题。 由于某种原因,它打电话给
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/core.rb#L330 有2个参数,但我无法弄清楚是谁打了这样的电话。它只发生在生产模式,而不是开发。
答案 0 :(得分:0)
我发现了问题,但这是最奇怪的事情。 在我的api控制器中的show方法中,我返回了一个对象,但我正在将哈希与一些额外的数据合并。如果我在浏览器中打开,响应很好,开发工作,但由于某种原因,在生产中它不想接受合并。 所以问题解决了,但仍然不知道为什么会这样发生。
答案 1 :(得分:0)
我在一个应用程序中遇到了类似的问题,该应用程序使用ActiveRecord作为供应商模型,使用ActiveResource作为具有供应商属性的交付模型。在开发中,如果尚未加载供应商模型,则可以获取交付并反序列化它,包括供应商属性。但是,如果已经加载了供应商模型,则尝试提取交货将导致本期中描述的错误。
如何在控制台中复制:
Vendor.connection
Delivery.find(1)
似乎AResource正在尝试创建Vendor的新实例。