将带参数的虚方法添加到as_json输入

时间:2013-08-06 23:22:07

标签: ruby-on-rails json

我得到了这个模型:

class Post
  def rating_by(ip_address, user = nil)
    if user
      ratings.where("ratings.user_id = ?", user.id).first
    else
      ratings.where("ratings.ip_address = ?", ip_address).first
    end
  end
end

您可能会注意到,我允许用户和访问者进行评分。

我想将帖子输出为json,并附加user_rating属性。

这是我目前的控制人员:

@posts = Post.trending(10)

respond_to do |format|
  format.html
  format.json { render json: @posts.to_json  }
end

当然这不会显示它,但我想知道是否有可能使用to_json的{​​{1}}选项并指定参数,例如:

:methods

所以我最终得到了类似的东西:

@posts.to_json(extra: {user_rating: "rating_by(#{request.remote_ip}, #{@current_user.id})"})

非常欢迎其他建议!

1 个答案:

答案 0 :(得分:0)

我评论了你的问题,但我想我会补充一些细节。

来自Active Model Serializers' page

class PersonSerializer < ActiveModel::Serializer
  attributes :first_name, :last_name, :full_name

  def full_name
    "#{object.first_name} #{object.last_name}"
  end
end

因此,您可以在序列化程序中定义user_rating参数。

此外,Active Model Serializers允许使用meta

render json: @posts, meta: {total: 10}

因此,您只需将计算机user_ratingmeta一起发送即可。