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>
通常人们使用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),而没有太多的麻烦。 –
ORM不能解决所有问题,特别是如果您想学习SQL。 Datamapper也有点过时了......我推荐使用类似于Ruby的SQL时最接近Ruby的续集。 – three