我正在为我的模型User
和User 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_at
和updated_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,只给我想要的属性。