带参数的主动模型序列化器?

时间:2015-10-23 13:29:49

标签: ruby-on-rails serialization active-model-serializers

我使用的是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?

非常感谢!

2 个答案:

答案 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使用的会话不能直接从您的模型中读取。

其他选项请阅读此帖:

Access current_user in model