Rails在查询后呈现JSON -问题:覆盖类似的SELECT字段名



下面是我做的一个查询,然后根据结果渲染json。但是,具有相同名称的SELECT字段被覆盖,例如meal.name和meal。Id被restaurants.name和restaurants.id所覆盖。

我在SQLite中尝试了查询字符串,它返回了我需要找到的所有列,但它没有正确呈现为JSON输出。任何帮助都会很感激。谢谢你

这是我的rails代码在我的控制器

    @meals = Meal.find(:all,
                  :select => 'meals.name, meals.id, sum(meal_ratings.rating), restaurants.name', 
                  :joins => 'LEFT JOIN meal_ratings, restaurants ON meals.id = meal_ratings.meal_id AND restaurants.id = meals.restaurant_id',
                  :group => 'meal_ratings.meal_id ',
                  :order => 'meal_ratings.rating DESC')
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @meals } #  
    end
结果如下:
[{"id":1,"name":"Parkside","sum(meal_ratings.rating)":2},
{"id":2,"name":"Parkside","sum(meal_ratings.rating)":1},
{"id":3,"name":"EVK","sum(meal_ratings.rating)":-1}]
下面是相同的SQL命令:
SELECT meals.name, meals.id, sum(meal_ratings.rating), restaurants.name
FROM meals 
LEFT JOIN meal_ratings, restaurants ON meals.id = meal_ratings.meal_id AND restaurants.id = meals.restaurant_id
GROUP BY meal_ratings.meal_id 
ORDER BY meal_ratings.rating DESC

下面是SQL结果

name|id|sum(meal_ratings.rating)|name
Pizza|1|2|Parkside
Pork Chops|2|1|Parkside
Spaghetti|3|-1|EVK

您可以使用SQL别名来解决这个问题:

:select => 'meals.name as meal_name, meals.id as meal_id, sum(meal_ratings.rating) as meal_rating, restaurants.name as restaurant_name'

最新更新