2017-10-14 35 views
1

製作預算應用程序,同時學習使用Ruby/Sinatra/SQL。其中一部分涉及讓用戶添加他們可以分配交易的新供應商。我的添加事務和添加供應商函數都有效,但我想要做的一件事是,如果用戶試圖添加的供應商(例如,「亞馬遜」)已經在數據庫中,並且在返回之前能夠拋出錯誤到我的供應商索引。如何在Sinatra中檢查用戶輸入到表單中的術語是否已經存在於您的數據庫中?

最近我得到的東西工作是使供應商表UNIQUE的名稱列。但是,如果我輸入的字段中已存在的名稱,則會出現「PG :: UniqueViolation」錯誤。

有沒有辦法告訴西納特拉你不想讓這個錯誤出現,你只是想重定向回供應商的索引而沒有重複的價值。

我的工作提交表單目前的樣子:

<div id="new-transaction"> 
    <form action="/vendors/create" method="POST"> 

    <label for="name">New vendor name:</label> 
    <input type="text" name="name" id="vendorName" /> 

    <input type="submit" value="Add new vendor" id="btn-new-vendor"> 

    </form> 
</div> 
+1

通常人們使用ORM來處理他們的數據庫驗證。最好還要添加數據庫級驗證,但使用ORM使事情變得更容易。 [這](https://code.tutsplus.com/tutorials/ruby-for-newbies-working-with-datamapper-net-19622)是一個很好的教程,使用[datamapper](http://datamapper.org /getting-started.html)與Sinatra - 這是一個ORM,就像Sinatra一樣,故意設置簡單。您也可以在Sinatra中使用Rails的[activerecord](http://guides.rubyonrails.org/active_record_basics.html),而沒有太多的麻煩。 –

+1

ORM不能解決所有問題,特別是如果您想學習SQL。 Datamapper也有點過時了......我推薦使用類似於Ruby的SQL時最接近Ruby的續集。 – three

回答

2

繼續使用這個錯誤作爲響應在您的應用程序一起工作。您可以在begin/rescue/end塊添加到您的方法:

# some code before 
begin 
    DB.add_your_vendor_method 
rescue 
    go_back_to_index 
end 
show_value_to_user 
# some code after 

可以作出這樣的誤塊特定的,太。有一些很好的紅寶書錯誤處理寫在http://rubylearning.com/satishtalim/ruby_exceptions.html

相關問題