2015-08-12 2 views
0

Проблема здесь в заказе не работает нормально. Значения "gross_profit" не сортируются по порядку, они полностью разупорядочены.Метод заказа неупорядочен мои данные

Ниже я опубликовал часть своего кода без вещей, которые не полагаются на эту проблему (надеюсь).

дб/мигрирует/create_projets.rb:

t.decimal :prix, :precision => 16, :scale => 2 
t.decimal :total_expenditures, :precision => 16, :scale => 2 
t.decimal :gross_profit, :precision => 16, :scale => 2 

Атрибут цена записывается пользователем в форме. Другие рассчитаны в приведенной ниже модели.

дБ/мигрирует/create_depenses.rb:

t.decimal :prix, :precision => 16, :scale => 2 
t.decimal :quantite, :default => 1, :precision => 16, :scale => 2 

Эти два атрибута записаны пользователем в форме.

приложения/модель/projet.rb:

has_many :depenses 

def set_total_expenditures 
    total_expenditures = 0 
    self.depenses.each do |d| 
     total_expenditures += d.quantite*d.prix 
    end 
    return total_expenditures 
end 

def set_gross_profit 
    self.prix - self.set_total_expenditures 
end 

def record_all 
    self.total_expenditures = set_total_expenditures 
    self.gross_profit = set_gross_profit 
end 

after_find :record_all 

Я построить метод «record_all», потому что кажется, что метод заказа принимает только данные из столбцов, а не данные из простого метода в моей модели ,

приложение/контроллеры/projets_controller.rb:

def index 
    @projets = Projet.order("gross_margin desc") 
end 

приложение/просмотров/Projets/index.html.erb:

<table> 
<% @projets.each do |p| %> 
     <tr> 
      <td><%= p.prix %></td> 
      <td><%= p.total_expenditures %></td> 
      <td><%= p.gross_profit %></td> 
     </tr> 
<% end %> 
<table> 

Я thinked может быть, это потому, что BigDecimals были преобразованы в Float на мгновение в приложении, но эта вещь, как правило, просто приводит к некоторой неточности в худшем случае, так что это не проблема.

Возможно, проблема связана со специальным шаблоном, который я использовал в методе «record_all»? Но я не вижу, где именно, если он здесь ...

Спасибо за помощь.

ответ

0

all Дитч:

@projets = Project.order("gross_margin desc") 

Примечание вариант перезаказа в docs, в случае, если область действия по умолчанию, определение ассоциации, или что-то другое вызывает предварительно существующий вид.

+0

Да, я удалил 'all' и отредактирован свой пост, он не присутствовал в исходном коде. Это ошибка, когда я разместил здесь свой код, потому что я удалил код, который не полагается на проблему. И, я проверил вариант переупорядочения, но он не решил проблему. У меня есть область по умолчанию (потому что это приложение с несколькими арендаторами), но в этой области по умолчанию нет никакого метода заказа. – Hugololo

0

Ваш индекс действия должны быть

def index 
    @projets = Projet.order(gross_margin: :desc) 
end 
+0

Да, я ответил в ответ на ответ Брэда. – Hugololo

Смежные вопросы