在我的konkurrancerstable中,我有:
rating_score => The current score (integer)
ratings => The number of ratings which led to the score (integer)
在我看来,我想在评级后对konkurrancers进行排序。 所以我必须做这个数学:rating_score / ratings 评级可能不为空,因为我不能将其除以零。
<% @konkurrencer.find(:all, :order => '@rating ASC', :limit => 5).each do |vind| %>
<%= link_to(image_tag(vind.banner2, :style => 'border:none; width:125px; height:125px;'), vind.tracking, :target => '_blank') %>
<% end %>
我的控制器:
class PublicController < ApplicationController
helper_method :sort_column, :sort_direction
def index
@konkurrencer = Konkurrancer
end
end
我的观点:
15: <%= @konkurrencer.find(:all, :select => "rating_score/ratings AS rating", :order => 'rating ASC', :limit => 5).each do |da| %>
16: <%= da.banner2 %>
17: <% end %>
我得到以下错误:
ActiveModel::MissingAttributeError in Public#index Showing C:/Rails/konkurranceportalen/app/views/public/_konkurrencer.html.erb where line #16 raised: missing attribute: banner2
如何创建实例变量评级以订购konkurrancers?
答案 0 :(得分:3)
如果没有别的,您可以在从数据库中检索记录后,按照两个标准对记录列表进行排序。
在控制器的index
方法中,我会这样做:
@konkurrancers = Konkurrancer.find(:all, :order => '@rating ASC')
@konkurrancers.sort! {|a, b|
rel = a.rating_score <=> b.rating_score
# if "rating_scores" are equivalent, only then consider "ratings"
rel == 0 ? a.ratings <=> b.ratings : rel
}
这将为您提供所有Konkurrencer对象的列表,按两个条件排序。
在您看来,我会这样做:
<% @konkurrancers[0,5].each do |vind| %>
<%= link_to(image_tag(vind.banner2, :style => 'border:none; width:125px; height:125px;'), vind.tracking, :target => '_blank') %>
<% end %
这应该只为您在控制器中创建的列表中的前5个项创建html。 (这是你想要的吗?)
答案 1 :(得分:0)
如果您使用的是SQL,则可以使用
@konkurrencer.find(:all, :select => "rating_score/ratings AS rating", :order => 'rating ASC', :limit => 5)
class Konkurrencer
def rating
self[:rating] || (rating_score/rating)
end
end
rshallit链接到一篇关于上述内容的好文章。但是它在Rails 3中,看起来你正在使用Rails&lt; 3