渲染rabl rails3

时间:2013-11-06 07:22:24

标签: ruby-on-rails ruby ruby-on-rails-3

我有params的根: 本地主机:3000 /点/ mypoint.json =的access_token acuotodEhqyFnVQPJ2AK 此根将返回所有用户餐厅的列表点(从access_token获取用户) 我的代码:

def mypoint
      @locations = Location.select("locations.*")
end
def totalpoint
    @totalpoint = 0
    return 0 if self.user_points.point.count==0
    self.user_points.point.collect { |p| @totalpoint = @totalpoint +p.points}
    return @totalpoint
end
scope :point, where( "points IS NOT ?", nil )

Rabl文件:

collection @locations
attributes :name, :totalpoint

数据库:

--id---user_id---point_type--restaurant_id---points---
  1       1       favourite       1            50
  2       7       ratings         1            123
  3       7       comments        1            50
  4       7       comments        2            50
  5       7       ratings         2            10

结果:

[
    {
        "name": "quoc",
        "totalpoint": 223
    },
    {
        "name": "Restaurant_id2",
        "totalpoint": 60
    }
]

但这是关于用户的所有餐厅的结果列表点。 请告诉我在totalpoint方法中添加条件user_id。 我想在下面得到结果 user_id = 1的结果:

[
    {
        "name": "quoc",
        "totalpoint": 50
    },
    {
        "name": "Restaurant_id2",
        "totalpoint": 0
    }
]

user_id = 7的结果:

[
    {
        "name": "quoc",
        "totalpoint": 173
    },
    {
        "name": "Restaurant_id2",
        "totalpoint": 60
    }
]

请给我你的解决方案。谢谢所有

1 个答案:

答案 0 :(得分:0)

正确地详细说明你的问题,我花了15分钟才明白!

您可以在模型内部编写方法。什么是型号名称? 按user_id获取点列表

首先找到所有唯一的user_id和restaurant_id

      a=Model.select("DISTINCT(restaurant_id)")
      b=Model.select("DISTINCT(user_id)")

现在a = [1,2]和b = [1,7]这个例子,现在获得每个餐馆用户收集的所有积分。

     score=Array.new

     b.each do |k|
       rest=Hash.new
       a.each do |f|
          rest[f]=Model.find(:all,:conditions=>["user_id=? and restaurant_id",k,f],:select=>["points"] )
       end
     score<<rest
      end

这样做。