为具有belongs_to关联的模型构建jsonapi时,会忽略该关联的白名单属性



我正在为我的模型UserUser belongs_to :role构建一个json api。尽管我已经为Role构建了一个jsonapi,并将我想要包含的属性列入白名单,但每当我访问user#show操作时,白名单属性都会被忽略。

在我的RoleSerializer文件中,我指定只能访问两个属性::id:name。当我转到"角色#显示"操作时,这很好,并且只渲染这两个属性。

/roles/1.json

{"role":{"id":1,"name":"Admin"}}

但是,此json响应不用于user#show json响应。它一直在使用created_atupdated_at属性,这是我不想要的。

/users/1.json

{ 
  "user": { 
      "id": 1,
      "email": "dietz.72@osu.edu",
      "name_n": "dietz.72", 
      "first_name": "Peter", 
      "last_name": "Dietz",
      "role": {  
          "created_at": "2013-08-08T00:21:56Z",
          "id":1,
          "name": "Admin",
          "updated_at": "2013-08-08T00:21:56Z" } } }

我尝试了多种方法在user_serializer.rb中列出:role属性,包括下面的代码。不幸的是,这不起作用。

user_serializer.rb

class UserSerializer < ActiveModel::Serializer
  attributes :id, :email, :name_n, :first_name, :last_name
  # I also tried attributes :role
  attribute :role, serializer: RoleSerializer
end

users_controller.rb-显示操作

def show
  @user = User.where(id: params[:id]).first
  respond_to do |format|
    format.html
    format.json { render json: users }
  end
end

user.rb

class User < ActiveRecord::Base
  attr_accessible :email, :emplid, :name_n, :first_name, :last_name
  belongs_to :role
  has_many :agreements, foreign_key: "student_id"
  has_many :forms, through: :agreements, foreign_key: "student_id"
  def active_model_serializer
    UserSerializer
  end
  ...
end

取自ActiveModelSerializer的github页面的问题队列中的这位优秀绅士:https://github.com/rails-api/active_model_serializers/issues/371#issuecomment-22363620

class UserSerializer < ActiveModel::Serializer
  attributes :id, :email, :name_n, :first_name, :last_name
  has_one :role, serializer: RoleSerializer
end

因此,即使控制器中有User belongs_to :role关联,使用has_one关联也会利用ActiveModel Serializer,只给我想要的属性。

最新更新