下面是我做的一个查询,然后根据结果渲染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'