我正在寫Sinatra應用程序Sequel。我第一次嘗試添加一種貨幣。在線上看後,我用Numeric
作爲一個值,當然不用說我需要精確的小數點。如何設置數據庫接受貨幣值?
我知道在MySQL中,Numeric
和Decimal
是一樣的。所以我想知道我在這裏做錯了什麼。我有這種感覺,我需要以某種方式定義小數點。在這裏我的模型:
# Contracts table: Here the users can define their contracs
DB.create_table?(:contracts, engine: 'InnoDB') do
primary_key :id
Integer :user_id, null: false
String :name, null: false
String :description
Numeric :cost, null: false
end
每次我嘗試提交帶有小數點我碰到下面的錯誤,我認爲這是一個驗證錯誤的值。我不明確使用驗證,所以我認爲它是Sequel或MySQL特定的。
我應該如何改變我的模式,以允許我補充十進制值?
編輯:根據要求添加我的控制器(路線)文件:
class Metro < Sinatra::Base
get "/user_add_contract" do
protected!
haml :user_add_contract
end
post "/user_add_contract" do
protected!
user = session['name']
begin
uid = User.first(username: user)
Contract.create(user_id: uid[:id], name: params['name'], description: params['description'], cost: params['cost'].to_f)
redirect '/user_list_contract'
rescue Exception => e
@error = e
haml :details_error
end
end
end
和HAML(視圖):
%form(action="/user_add_contract" method="post")
%fieldset
%legend Φόρμα Νέου Συμβολαίου
%div{class: 'column1of2'}
%ul
%li
%label(for="name")Ονομασία:
%input#name(name="text" name="name")
%li
%label(for="description")Περιγραφή:
%textarea.email#description(type="text" name="description")
%li
%label(foor="cost")Κόστος:
%input#cost(type="number" name="cost")
%li
%input(type="submit" value="Εγγραφη") ή <a href="/panel">Ακύρωση</a>
感謝
你能,你是如何處理的輸入值後顯示的代碼?此外,錯誤是否立即出現或您點擊提交? – acsmith
@acsmith當然,這裏是涉及的其他兩個文件。我不確定在視圖(HAML)中,'%input#cost(type =「number」name =「cost」)行可以接受float或decimal而不是'number'類型。 –
是的,不過,@acsmith因爲你的洞察力使我得到了正確的答案,所以如果你想寫答案,以便今天晚些時候我可以放棄它。 :-) –