SQL Query to Rails 3 for average user ratings -
i have rails app rates restaurants on specific dimensions using letsrate gem. i'd calculate average of ratings each restaurant , display user in array on index page.
my sql query -
select avg(stars) restaurants r, rates rs rs.rateable_id = r.id group r.name;    the array in index looks -
<% @restaurants.each |restaurant| %> <li>     <a href="<%=restaurant_path(restaurant) %>" >         <div class="left">             <h2 class="name"><%= restaurant.name %></h2>             <h3 class="location"><%= restaurant.location %></h3>         </div>         <div class="right">             <h4 class="rate">average rating</h4>         </div>         <div class="clear"></div>     </a> </li> <% end %>   wondering how translate sql query rails display averages in array.
if setup relations correctly, should work. if not i'll fix them.
edit
in restaurant controller:
class restaurantcontroller > applicationcontroller    def index     @restaurants = rate.joins(:restaurant).select("avg(rates.stars) res_avg, restaurants.name, restaurant.location").group("restaurants.name")   end end   in restaurant index.html.erb:
<% @restaurants.each |restaurant| %> <li>   <a href="<%=restaurant_path(restaurant.id) %>" >     <div class="left">         <h2 class="name"><%= restaurant.name %></h2>         <h3 class="location"><%= restaurant.location %></h3>     </div>     <div class="right">         <h4 class="rate"><%= restaurant.res_avg %></h4>     </div>     <div class="clear"></div>   </a> </li> <% end %>   edit2 if want re-use query declare in scope on model.
class restaurant < activerecord::base   #all model code   scope :avg_restaurant_rates, joins(:rate).select("avg(rates.stars) res_avg, restaurants.name, restaurants.location").group("restaurants.name") end      
Comments
Post a Comment