0

我得到了这个模型:

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

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

我想将帖子输出为带有附加user_rating属性的 json。

这是我当前的控制器:

@posts = Post.trending(10)

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

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

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

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

[{ id: 54, title: "Foo", user_rating: 8 }]

非常欢迎其他建议!

4

1 回答 1

0

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

Active Model Serializers 页面

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_rating用电脑发送它meta

于 2013-08-06T23:49:17.940 回答