Ruby on rails Rails如何在实例变量之后排序

Ruby on rails Rails如何在实例变量之后排序,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,在我的Konkurancerstable中,我有: rating_score => The current score (integer) ratings => The number of ratings which led to the score (integer) 在我看来,我想在评级后对Konkurancers进行分类。 所以我必须做这个数学:评分/评分 评级不能为空,因为我不能除以零 <% @konkurrencer.find(:all, :order =>

在我的Konkurancerstable中,我有:

rating_score => The current score (integer)
ratings => The number of ratings which led to the score (integer)
在我看来,我想在评级后对Konkurancers进行分类。 所以我必须做这个数学:评分/评分 评级不能为空,因为我不能除以零

<% @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 %>

如何创建实例变量评级以对Konkurancers进行排序?

如果没有其他内容,您可以在从数据库检索记录后按两个标准对记录列表进行排序

在控制器中的
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
}
<% @konkurrancers[0,5].each do |vind| %>
   <%= link_to(image_tag(vind.banner2, :style => 'border:none; width:125px; height:125px;'), vind.tracking, :target => '_blank')  %>
<% end %
@konkurancers=konkurancer.find(:all,:order=>“@rating ASC”)
@康库兰切斯,排序!{a,b|
rel=a.评级得分b.评级得分
如果“拉丁文分数”是等价的,那么只考虑“收视率”。
rel==0?a.评级b.评级:rel
}
这将给你一个所有Konkurrencer对象的列表,按两个标准排序

在你看来,我会这样做:

@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
}
<% @konkurrancers[0,5].each do |vind| %>
   <%= link_to(image_tag(vind.banner2, :style => 'border:none; width:125px; height:125px;'), vind.tracking, :target => '_blank')  %>
<% end %

"边界:无;;宽度:125px;高度:125px;'),VIN.tracking,:target=>“_blank”)%>

如果您使用的是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中,并且您似乎正在PublicController中使用Rails<3

NoMethodError#索引未定义的方法'sort!'例如,将其放入控制器中。至于您收到的错误消息,请确保您正在应用
排序方法到对象列表:
@koncurrancer.find(…).sort!{…}
应该这样做。我已经使用了上面的代码,我得到了以下错误:PublicController中的NameError#index uninitialized constant PublicController::konkurrencerc您能告诉我您的模型和/或表的名称(您的评级是从中得出的)吗?是Konkurrancer还是Konkurrancer?模型是Konkurrancer,表格Konkurrancers确实有帮助?你是说“实例变量”,而不是“即时变量”我得到一个错误:ActiveModel::MissingAttributeError in Public#索引显示C:/Rails/konkuranceportalen/app/views/Public/_konkurarencer.html.erb,其中第16行出现:缺少属性:banner2在Mysql中是如何完成的我在本地pc上使用它,在服务器上使用SQL find方法中的select子句需要包含所有需要的字段。即:选择=>“横幅2,评分/评分为评分”等
@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