[英]How do I get the value of a form.input in active admin (ruby on rails)
[英]bug when i input value “45” i get “0.45e2” ruby on rails
我不明白為什么當我輸入 45 時我得到 0.45e2 而任何像褲子這樣的刺都可以正常工作我有以下 html
<%= form_with(model: invoice, local: true) do |form| %>
<% if invoice.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(invoice.errors.count, "error") %> prohibited this invoice from being saved:</h2>
<ul>
<% invoice.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<center><h1>ΤΔΑ-ΤΙΜΟΛΟΓΙΟ-ΔΕΛΤΙΟΥ ΑΠΟΣΤΟΛΗΣ</h1></center>
<div align="right">
</div>
<pre>ID CODE DESCRIPTION BASE CODE QUANTITY </pre>
<table style="border:2px solid black;"id="tableid">
<td><input type="text" name="invoice[items][]" /></td>
<td><input type="number" name="invoice[tax][]" /></td>
<td><input type="number" name="invoice[discount][]" /></td>
<td><input type="number" name="invoice[sum][]" /></td>
<td><input type="number" name="invoice[price][]" /></td>
</tr>
</table>
<script type="text/javascript">
var table = document.getElementById("tableid");
table.addEventListener("keyup", function(event)
{
if (event.keyCode === 18)
{
event.preventDefault();
var rowid=table.rows.length-1;
var row = table.insertRow(rowid+1);
row.id = (rowid+1).toString();
var cell0 = row.insertCell(0);
var cell1 = row.insertCell(1);
var cell2 = row.insertCell(2);
var cell3 = row.insertCell(3);
var cell4 = row.insertCell(4);
cell0.innerHTML = "<input type='text' size='8' name='invoice[items][]'></input>";
cell1.innerHTML = "<input type='text' size='8' name='invoice[tax][]'></input>";
cell2.innerHTML = "<input type='text' size='8' name='invoice[discount][]'></input>";
cell3.innerHTML = "<input type='text' size='8' name='invoice[sum][]'></input>";
cell4.innerHTML = "<input type='text' size='8' name='invoice[price][]'></input>";
}
});
</script>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
和我的 controller
def invoice_params
params.require(:invoice).permit({:items => []}, {:price => []}, {:tax => []}, {:discount => []}, {:sum => []})
end
所以當我創建新項目時會發生這種情況
Invoice was successfully created.
Items: ["pants", "spoon"]
Price: [0.45e2, 0.2e1]
Tax: [0.45e2, 0.25e2]
Discount: [0.45e2, 0.2e2]
Sum: [0.45e2, 0.22e2]
Edit | Back
我應該告訴 ruby on rails tat params sum,tax,discoun 是數字還是類似的東西? 還是必須是保存參數的更好方法? 因為字符串工作正常
如果您將 t.numeric 更改為t.float也可以更新以解決問題
處理貨幣時最好完全避免浮點數,並轉換為例如美分(或任何您的貨幣的最小面額)進行存儲。 如果您知道您只需要支持一種貨幣,這將很簡單。 當然,您仍然希望允許通過十進制表示法輸入和顯示價格。 在創建新的price_cents
等列並遷移現有數據之后,我將在您的Invoice
model 中處理該問題:
def price=(value)
value = value.to_f if value.is_a? String
self.price_cents = (value * 100).round
end
def price
price_cents&.positive? ? price_cents / 100.0 : 0
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.