2014-01-20 50 views
0

我正在寫Sinatra應用程序Sequel。我第一次嘗試添加一種貨幣。在線上看後,我用Numeric作爲一個值,當然不用說我需要精確的小數點。如何設置數據庫接受貨幣值?

我知道在MySQL中,NumericDecimal是一樣的。所以我想知道我在這裏做錯了什麼。我有這種感覺,我需要以某種方式定義小數點。在這裏我的模型:

# 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特定的。

enter image description here

我應該如何改變我的模式,以允許我補充十進制值?

編輯:根據要求添加我的控制器(路線)文件:

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> 

感謝

+0

你能,你是如何處理的輸入值後顯示的代碼?此外,錯誤是否立即出現或您點擊提交? – acsmith

+0

@acsmith當然,這裏是涉及的其他兩個文件。我不確定在視圖(HAML)中,'%input#cost(type =「number」name =「cost」)行可以接受float或decimal而不是'number'類型。 –

+0

是的,不過,@acsmith因爲你的洞察力使我得到了正確的答案,所以如果你想寫答案,以便今天晚些時候我可以放棄它。 :-) –

回答

1

相關答案:How to handle floats and decimal separators with html5 input type number

step=""屬性默認爲這意味着它將截斷小數點後的所有內容(或者返回一個錯誤,具體取決於它的設置和瀏覽器的使用方式)。

嘗試設置step="0.01",在輸入元素上,假設您只想得到最接近的分,並看看是否有效。其他的一切在你的代碼看起來不錯。*

  • 除非你有「福爾」,而不是「爲」在你的成本<label>
+0

這是否也解決了小數問題? – acsmith