如何从控制器确定订单

时间:2014-01-13 10:15:15

标签: ruby-on-rails ruby

我的餐厅有很多员工,每位员工都有很多客户评级。

我想创建一个统计信息页面,按照月平均评分显示员工。

在员工模型中:

def avg_rating
   date = Date.today
   ratings_total = self.ratings.sum(:score, :conditions => {:created_at => (date.beginning_of_month..date.end_of_month)}).to_f
   ratings_count = self.ratings.count(:conditions => {:created_at => (date.beginning_of_month..date.end_of_month)}).to_f
   return (ratings_total/ ratings_count)
end

在餐厅控制器中我有:

def restaurant_stats
  @restaurant = Restaurant.find(params[:restaurant_id])
  @employees = @restaurant.employees.all
end

在餐厅统计视图中:

<table>
<% @employees.each do |employee| %>
 <tr>
  <td><%= employee.name %></td>
  <td><%= employee.avg_rating %></td>
 </tr>
<% end %>
</table>

我不确定如何让员工按照正确的顺序?我假设我必须在restaurant_stats动作中以正确的顺序检索值,而不仅仅是@ restaurant.employees.all但是我不知道如何因为员工模型中使用的功能而

3 个答案:

答案 0 :(得分:1)

你可以从控制器那里做到:

@employees = @restaurant.employees.all.sort_by {|employee| employee.avg_rating}

或更简洁

@employees = @restaurant.employees.all.sort_by(&:avg_rating)

请注意,这会将所有员工加载到内存中进行排序。

答案 1 :(得分:0)

尝试餐厅控制器:

@employees = @restaurant.employees.all.sort {|x,y| y.avg_rating <=> x.avg_rating }

@employees = @restaurant.employees.all.sort_by(:avg_rating)

答案 2 :(得分:0)

你可以创建一个数组并对其进行排序 我认为下面有效,但没有检查

@employees = @restaurant.employees.collect {|p| [ p.name, p.avg_rating ]}
@employees.sort!{ |a,b| (a[1] <=> b[1]) }