订单方法使我的数据混乱

时间:2015-08-12 08:11:31

标签: ruby-on-rails decimal

这里的问题是订购不正常。 " gross_profit"值没有按顺序排序,它们完全混乱。

下面,我发布了部分代码,但没有任何不依赖此问题的内容(我希望)。

db / migrate / 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

价格属性由用户以表格形式记录。 其他的在下面的模型中计算。

db / migrate / create_depenses.rb:

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

这两个属性由用户以表格形式记录。

app / models / 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"方法因为看起来order方法只接受来自列的数据,而不接受来自我模型中的简单方法的数据。

app / controllers / projets_controller.rb:

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

app / views / 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>

我认为可能是因为BigDecimals在应用程序中的某个时刻被转换为Float,但这通常只会带来一些不准确的情况,所以这不是问题所在。 / p>

或者问题可能来自我在&#34; record_all&#34;中使用的特殊模式。方法 ?但我不知道它到底在哪里......

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

抛弃all

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

请注意docs中的重新排序选项,以防默认范围,关联定义或其他因素导致预先存在的排序。

答案 1 :(得分:0)

您的索引操作应为

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