快速提问。
我正在完成我的RoR计划,我正在努力完成用户验证。我会快速说明我要做的事情:
我的程序使用HTML文件,该文件具有用于用户输入的文本字段。文本字段输入 customerId 应该是一个整数。无论如何,如果输入无效,我应该显示特定的消息(根据提供的规范有效)。我用这一行来验证输入 customerId 是否为int:
<% if @customerId =~ /\D/
render :action => 'invalid'
end %>
我想在此之后或之后添加另一个if语句,以检查用户输入的 customer_Id 值是否在 Customer 表中在数据库中。
有一种简单的方法吗?从逻辑上讲,我认为它会像:
<% if !Customer.find(@customer_Id)
#customer not found message
end %>
这是我使用RoR完成的第一个项目,并且不知道Ruby为此提供的简单实现。谢谢!
答案 0 :(得分:0)
为此,我添加了一些代码行,而不是在视图中执行此操作,我在主控制器中执行了此操作。这是执行它的块:
when "cu" then # customer data request
# Verify that customer is in the customer table
if Customer.exists?(@data)
# exists, display custdisply.html.erb
render :action => 'custdisplay'
else
# does not, display notfound.html.erb
render :action => 'notfound'
end
答案 1 :(得分:0)
Rails ActiveRecord库提供了很多really nice validators,在这种情况下似乎是合适的。
class Customer < ActiveRecord::Base
validates_presence_of :name
end
但是,在这种情况下,验证器不是必需的。默认情况下,当您在模型类上调用.find
时,如果该ID无效,则会引发ActiveRecord::RecordNotFound
错误并转到您的public/404.html
页面:
class CustomersController < ApplicationController
def show
@customer = Customer.find(params[:id])
end
end
如果您尝试在视图脚本中调用.find
,则为时已晚,因为路由已完成。您应该在控制器中调用.find
。