使用Rails 4计算表中的2行

时间:2014-06-10 19:24:53

标签: ruby-on-rails ruby ruby-on-rails-4.1

这是我的第一个问题,我是Rails的新手。 我目前陷入了一些相当简单的事情,但我找不到出路。 在我的cost / index / html.erb文件中 我有以下几行:

<tbody>
    <% @costs.each do |cost| %>
      <tr>
        <td><%= cost.mini_description %></td>
        <td><%= cost.description %></td>
        <td><%= cost.quantity %></td>
        <td><%= cost.rate %></td>
        <td><%= cost.total %></td>
        <td><%= cost.total_of_all_rows %></td>
        <td><%= cost.job %></td>
        <td><%= link_to 'Show', cost %></td>
        <td><%= link_to 'Edit', edit_cost_path(cost) %></td>
        <td><%= link_to 'Destroy', cost, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
</tbody>

我正在尝试计算费率和数量,以便产生总金额。结果,我创建了以下变量,我已经调用它但是我被抛出错误。我哪里出错?:

<tbody>
    <% @costs.each do |cost| %>
      <tr>
        <td><%= cost.mini_description %></td>
        <td><%= cost.description %></td>
        <td><%= cost.quantity %></td>
        <td><%= cost.rate %></td>
        <%= cost_var = cost.quantity * cost.rate %>
        <td><%= cost.total, cost_var %></td>
        <td><%= cost.total_of_all_rows %></td>
        <td><%= cost.job %></td>
        <td><%= link_to 'Show', cost %></td>
        <td><%= link_to 'Edit', edit_cost_path(cost) %></td>
        <td><%= link_to 'Destroy', cost, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
</tbody>

任何建议都将不胜感激。

* 感谢所有贡献的人。 在我的模型中,我把 def cost_var quantity * rate end

在我看来,我打电话给

<td><%= cost.total%><%=cost.cost_var%></td>

我的问题是,当我搭建支架时,我的数量和费率类型是字符串。我必须通过在我的模型中添加.to_f来改变它:

def cost_var quantity.to_f * rate.to_f end

现在它终于奏效了!感谢@Iceman和@Micah

2 个答案:

答案 0 :(得分:2)

处理此问题的最佳方法是向模型添加方法

def quantity_rate
  quantity * rate
end

然后在你的视图中使用它,就像其他人一样。

<%= cost.quantity_rate %>

答案 1 :(得分:0)

您希望尽可能避免在ERB文件中进行计算(请阅读:始终)。尽可能多地在模型中进行计算,并在控制器中执行任何操作。对于这种特殊情况,我会在Cost模型中创建一个名为cost_var的方法,如下所示:

def cost_var
  quantity * rate
end

然后通过cost.cost_var在ERB文件中调用它。这样,您就无法在视图页面中执行计算。

除了从您的观点中提取计算外,如果我没有弄错,<%= cost.total, cost_var %>是无效的行。您是否尝试显示以下内容:50,35?如果是这样,你需要做<%= cost.total %>,<%= cost_var %>