【问题标题】:josevalim / active_model_serializers controller argument errorjosevalim / active_model_serializers 控制器参数错误
【发布时间】:2012-08-03 18:59:34
【问题描述】:

我正在玩 Jose Valim 的 active_model_serializers Gem。

我正在尝试在我的控制器中调用自定义序列化程序,但看起来 :json 没有按应有的方式使用 ActiveModel::ArraySerializer

当我在控制器中定义default active_model_serializer 时,序列化器工作正常;但是,当我在控制器中调用这样的自定义时:

render :json => @project, :serializer => ProjectSerializer

我收到以下错误:

wrong number of arguments (0 for 1)

我使用的是 Ruby 1.9.2 和 Rails 3.2.7。感谢任何帮助,因为我需要为任何给定模型创建一些不同的序列化程序。

谢谢!

【问题讨论】:

  • 您确定错误在该行吗? render 的签名是 render(*args, &block),因此即使 @projectnil,您也不会收到此错误。另外,您的 ProjectSerializer 代码是什么样的?
  • 如果@project 是一个数组,它可能应该命名为@projects。这不会解决问题,但它会更有意义并有助于调试。

标签: ruby-on-rails json gem active-model-serializers


【解决方案1】:

所以我一定是在破解什么的。 :serializer 调用只接受对象数组。

渲染 :json => @project, :serializer => ProjectWithTaskEstimateSerializer

当您想在对象数组中的每个对象上调用序列化程序时,您需要使用 each_serializer。我不知道我是怎么错过的。

渲染 :json => @project, :each_serializer => ProjectSerializer

【讨论】:

  • 当您使用 json 数组调用 render 时,您可以同时使用 :serializer:each_serializer 选项。 :serializer 将覆盖 ArraySerializer。 :each_serializer 将覆盖数组中每个对象的序列化程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
相关资源
最近更新 更多