Ota*_*uzo 5 ruby-on-rails devise active-model-serializers
我在 rails5 中使用 Active Model Serializer 0.10.7
我想知道如何在序列化程序中访问设计 current_user。
current_user 应该默认设置为范围。
根据文档
但我的代码不能正常工作...
有人知道这个吗?
class BookSerializer < ActiveModel::Serializer
attributes :id, :title, :url, :image, :is_reviewed
def is_reviewed
object.reviews.pluck(:user_id).include?(current_user.id)
end
end
Run Code Online (Sandbox Code Playgroud)
和 Book 控制器看起来像这样。
class BooksController < ApplicationController
def index
@books = Book.order(created_at: :desc).page(params[:page])
respond_to do |format|
format.html
format.json {render json: @books, each_serializer: BookSerializer}
end
end
end
Run Code Online (Sandbox Code Playgroud)
在控制器(或其他地方)实例化序列化器时,可以将范围传递到序列化器中。我明白这是针对单个对象而不是对象数组:
BookSerializer.new(book, scope: current_user)
Run Code Online (Sandbox Code Playgroud)
然后Book Serializer你可以这样做:
class BookSerializer < ActiveModel::Serializer
attributes :id, :title, :url, :image, :is_reviewed
private
def is_reviewed
object.reviews.pluck(:user_id).include?(current_user.id)
end
def current_user
scope
end
end
Run Code Online (Sandbox Code Playgroud)
Ana*_*and -1
似乎有一个拼写错误,你已经is_reviewed定义了方法has_reviewed
,所以它应该是这样的
class BookSerializer < ActiveModel::Serializer
attributes :id, :title, :url, :image, :is_reviewed
def is_reviewed
object.reviews.pluck(:user_id).include?(current_user.id)
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4281 次 |
| 最近记录: |