Как рассчитать рельсы моделей колонн - PullRequest
2 голосов
/ 27 ноября 2011

У меня есть модель Артикул.

файл миграции:

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 файлы и использовал помощники форм. Но поле и count_text total_price нужно генерировать автоматически (цена * count_text) Count_text - это размер строки тела. Пользователь вводит текст в тело поля, текст рассчитывается и затем умножается на цену и отображается пользователю перед подтверждением создания записи. Как это сделать?

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

Вы можете использовать виртуальные атрибуты для этих двух столбцов.Если вам интересно, отметьте здесь .

Я сам новичок, но я уверен, что другие могут помочь вам построить функции.Виртуальные атрибуты - это то, что вы ищете.

0 голосов
/ 28 ноября 2011

Насколько я понял вопрос, вы хотите отобразить total_price (count_text * price) перед созданием записи товара. Расчет общей цены на стороне рельсов будет включать ненужный серверный вызов, потому что пользователь может отменить товар навидя цену статьи.Ваша проблема может быть легко решена с помощью 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...