在使用的Rails加载ActiveModel ::串行器 - JSON数据JSON和索引响应之间不

2019-07-03 19:17发布

我使用active_model_serializers宝石来控制序列化数据,并看到一些奇怪的行为。 我的代码如下所示:

模型和串

class User
  include Mongoid::Document
  field :first_name, :type => String
  field :last_name,  :type => String

  def full_name
    first_name + " " + last_name
  end
end

class UserSerializer < ActiveModel::Serializer
  attributes :id, :first_name, :last_name, :full_name
end

调节器

class UsersController < ApplicationController
  respond_to :json, :html

  def index
    @users = User.all
    respond_with @users
  end
end

视图(app /视图/用户/ index.html.erb)

...
<script type="text/javascript">
  $(function(){
    // using a backbone collection to manage data
    App.users = new App.Collections.Users(<%= @users.to_json.html_sage %>);
  });
</script>

现在,当我渲染视图,我看到full_name属性(通过在模型方法生成)从我的数据丢失:

{
  "id": 2,
  "first_name": "John",
  "last_name": "Doe"
}

当我访问/users.json (我有resources :users在我routes.rb文件),我看到正确的JSON:

{
  "id": 2,
  "first_name": "John",
  "last_name": "Doe",
  "full_name": "Jonn Doe"
}

我看不出什么,我可能是做错了 - 任何输入会有所帮助。 谢谢。

Answer 1:

你是不是使用的HTML视图中的串行器。 试试这个:

App.users = new App.Collections.Users(<%= UserSerializer.new(@users).to_json.html_safe %>);

这样做的原因是,串行器在拿起respond_with方法,序列化程序不会覆盖你的.to_json方法。



Answer 2:

@Gagan这个工作对我来说:

App.users = new App.Collections.Users(<%= ActiveModel::ArraySerializer.new(@users).to_json.html_safe %>);



文章来源: Using ActiveModel::Serializer in Rails - JSON data differs between json and index response