Rails как сделать заказ после переменной экземпляра - PullRequest
1 голос
/ 11 апреля 2011

В моем konkurrancerstable у меня есть:

rating_score => The current score (integer)
ratings => The number of ratings which led to the score (integer)

На мой взгляд, я хочу отсортировать konkurrancers после оценки.Поэтому я должен сделать это по математике: rating_score / рейтинги рейтинги не могут быть нулевыми, потому что я не могу делить на ноль.

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

Ответы [ 2 ]

3 голосов
/ 11 апреля 2011

Если ничего другого, вы можете отсортировать список записей по двум критериям после извлечения их из базы данных.

В методе 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 %

Это должно создать HTML только для первых 5 элементов в списке, который вы создали в вашем контроллере. (Это то, что вы хотели?)

0 голосов
/ 12 апреля 2011

Если вы используете 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 <3 </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...