使用Active Model Serializer中的pluck

时间:2015-04-14 16:48:28

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

我想在Active Model Serializer中使用pluck方法进行对象关联:

Post has_many :comments

有没有办法覆盖

 has_many :comments
串口化程序中的

在注释中使用pluck(:id,:title)?

2 个答案:

答案 0 :(得分:1)

您可以使用带has_many的块来扩展与方法的关联。请参阅注释“使用块来扩展关联”here

class Post < ActiveRecord::Base
   has_many :comments do
     def plucked()
       select("id, title")
     end
   end
end

或其他方法,从同一个链接可以,从数据库中获取comments时有自定义的SQL查询:

has_many :comments, :class_name => 'Comment', :finder_sql => %q(
  SELECT id, title
  FROM comments
  WHERE post_id = #{id}
)

在导轨documentation中,它显示有一个选项:select,也可以用于此目的。

答案 1 :(得分:0)

在这种情况下我通常会做什么,我有两个不同的序列化器CommentSerializerCommentInfoSerializer。因此CommentInfoSerializer仅包括我想在其父资源的嵌入属性中响应的最小属性。

class CommentSerializer < ActiveModel::Serializer
  attributes :id, :title, :body
end

class CommentInfoSerializer < ActiveModel::Serializer
  attributes :id, :title
end

class PostSerializer < ActiveModel::Serializer
  has_many :comments, serializer: CommentInfoSerializer
end