2011-12-28 55 views
1

下面是一个查询,然后根据结果渲染json。但是,具有相同名称的SELECT字段将被覆盖,例如meal.name和meal.id将被restaurants.name和restaurants.id覆盖。Rails在查询后渲染JSON - 问题:覆盖相似的SELECT字段名称

我在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 

回答

0

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

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

是啊是工作!谢谢。 – 2011-12-28 02:19:37

+0

我现在有一个新问题。如果总和(meal_ratings.rating)为空,则不会返回膳食条目。我不知道为什么因为我正在做一个左加入,所以所有的食物都应该存在。请让我碰巧知道。再次感谢 – 2011-12-28 02:37:54

+0

好吧,这是一个单独的问题。不,因为你没有接受或提出任何答案。 – Finbarr 2011-12-28 05:03:04