我使用的是Active Model Serializer,我需要包含一个在控制器范围内的参数。例如,我对帖子进行了序列化,但是current_user(PostController中的变量)和Serializer中的帖子之间存在条件。
class PostSerializer < ActiveModel::Serializer
attributes :id, :active, :favorite
def favorite
if current_user.favorites.find(object.id) != nil
return true
end
end
但是,current_user未定义。无论如何我可以将current_user作为参数发送到Serializer?
非常感谢!
答案 0 :(得分:2)
您使用的是哪种版本的Active Model Serializer?我使用0.8.3无论如何它有一个选项参数,所以你可以像
那样调用序列化器PostSerializer.new(post, :current_user => current_user)
并访问current_user选项,如
def favorite
if options[:current_user].favorites.find(object.id) != nil
return true
end
end
但是我怀疑实际序列化一个恰好与最喜欢的帖子有关系的用户会更干净
答案 1 :(得分:0)
我认为这将是最好的:
def favorite(user)
if user.favorites.find(object.id) != nil
return true
end
end
只是将用户传递给方法,因为设计current_user
使用的会话不能直接从您的模型中读取。
其他选项请阅读此帖: