如何计算rails rails模型列

时间:2011-11-27 17:16:02

标签: ruby-on-rails ajax real-time calc

我有模型文章。

迁移文件:

class CreateArticles < ActiveRecord::Migration
  def change
    create_table :articles do |t|
      t.string :name
      t.string :description
      t.string :body
      t.string :keyword
      t.integer :price
      t.integer :count_text
      t.integer :total_price
      t.timestamps
    end
  end
end

ArticlesController有两种标准方法newcreate

我做了new.html.erb个文件并使用了表单助手。 但是field和count_text total_price需要自动生成(price * count_text) Count_text - 是主体线的大小。 用户在字段正文中输入文本,计算文本然后乘以价格并在确认创建记录之前显示给用户。如何制作?

2 个答案:

答案 0 :(得分:2)

您可能希望对这两列使用虚拟属性。如果您有兴趣,请查看here

我自己是新手,但我相信其他人可以帮助你建立功能。虚拟属性似乎是您正在寻找的。

答案 1 :(得分:0)

据我所知,您希望在创建文章记录之前显示total_price(count_text *价格)。计算rails侧的总价格将包括不必要的服务器调用,因为用户可能会取消该文章看到文章的价格。您可以使用javascript / jquery轻松解决您的问题,您可以编写一个小函数来计算显示总金额。 让我们说把金额放在标签上。 您可以通过以下代码获得一些想法,我想:

<html>
<head>
<title> Demo Article </title>
<script src="jquery-1.5.1.min.js" type="text/javascript" ></script>
<script type="text/javascript">
$(document).ready(function() {
$("#txtBody").focusout(
function()
{
var count, total_price;
count = $("#txtBody").val().length; // get length of the text in the textarea
total_price = count * $("#price").val(); // multiple with the price per character
$("#txtBody").after('<br><mark> Total Price : ' + total_price +"</mark>"); // display the total price
}
)
$("#txtBody").focus(
function()
{
$("mark").remove(); // removes the total price if the body id currently edited
}
)
});
</script>
<style>
mark {font-size:1.875em;color:white;background-color:#DC143C;}
</style>
<head>
<body>
Price: <input type="text" readonly="true" id="price" value="7")><br>
Body : <textarea cols="30" id="txtBody"> </textarea>

</body>
</html>