我正在为我的模型User
和User belongs_to :role
构建一个json api。即使我已经为Role
构建了json api并将我想要包含的属性列入白名单,但每当我访问user#show
操作时,都会忽略列入白名单的属性。
在我的RoleSerializer
文件中,我指定只能访问两个属性::id
和:name
。当我转到'roles#show'动作时,这样可以正常工作,并且只渲染这两个属性。
/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" } } }
我尝试了多种方式列出:role
中的user_serializer.rb
属性,包括以下代码。不幸的是,这不起作用。
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
答案 0 :(得分:0)
从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序列化程序并仅提供我想要的属性。