这里的问题是订购不正常。 " 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;中使用的特殊模式。方法 ?但我不知道它到底在哪里......
感谢您的帮助。
答案 0 :(得分:0)
答案 1 :(得分:0)
您的索引操作应为
def index
@projets = Projet.order(gross_margin: :desc)
end