我有这段代码:

users = Array.new
users << User.find(:all, :conditions => ["email like ?", "%foo%"])
users << User.find(:all, :conditions => ["name like ?", "%bar%"])
users.flatten!
users.uniq!
puts users.to_json :include => [:licenses]

当我使用脚本/控制台运行它时,它会准确地返回您认为应该的内容,即我发现,展平和未经过调整的用户数组的JSON表示。但是作为 search_for_users 方法的一部分运行相同的代码行,我收到此错误

  

ControllerName中的TypeError#search_for_users
  错误的参数类型哈希(预期数据)

,引用的行是.to_json调用的行。

令我感到困惑的是,因为代码是逐字的。唯一的区别是,当我在控制台中运行它时,我手动输入条件,但在我的方法中,我从 params [:query] 中提取查询。但是,我只是尝试对查询进行硬编码并得到相同的结果,所以我认为这不是问题所在。如果我删除:include ,我没有看到错误,但我也没有得到我想要的数据。

任何人都知道问题可能是什么?

有帮助吗?

解决方案

如果包含在控制器中,有一些插件和宝石会导致.to_json失败。我相信Twitter的宝石就是其中之一(这一段时间遇到了问题)。

你有“包括[任何]”吗?或“要求[任何]”或在这个控制器?

如果没有,我建议暂时删除您正在使用的任何插件进行故障排除等。

最后,如果用简单的方式替换整个控制器操作会发生什么: %w(1 2 3 4 5).to_json

这可以帮助你确定失败的原因。

其他提示

每当测试或控制台中的代码与生产环境的行为不同时(这可能是猜测......您可能在开发模式下运行您的站点),这就会导致加载订单问题。在生产环境中,所有模型和控制器都是预加载的,在其他环境中,它们在需要时会被懒散地加载。 使用 RAILS_ENV = production ./script/console 启动控制台,看看是否可以通过这种方式重现错误。 正如cscotta所提到的,有几个宝石和图书馆可以干扰.to_json,首先要提到你需要'json'时得到的功能。我个人遇到了几个问题。

希望这有帮助

的Seb

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top