在我的 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 %>
我的 Controller :
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
如何创建实例变量 rating 来订购 konkurrancers?
最佳答案
如果不出意外,您可以从数据库中检索记录列表后按两个标准对其进行排序。
在 Controller 的 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 %
这应该只为您在 Controller 中创建的列表中的前 5 个项目创建 html。 (这是你想要的吗?)
关于ruby-on-rails - Rails 如何在实例变量之后排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5626154/