我有模型文章。
迁移文件:
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
有两种标准方法new
和create
我做了new.html.erb
个文件并使用了表单助手。
但是field和count_text total_price需要自动生成(price * count_text)
Count_text - 是主体线的大小。
用户在字段正文中输入文本,计算文本然后乘以价格并在确认创建记录之前显示给用户。如何制作?
答案 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>