0

最后自己回答了。我发布了答案。谢谢!

快速提问。

我正在结束我的 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 提供了一个简单的实现。谢谢!

4

2 回答 2

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
于 2013-11-12T23:32:12.483 回答
0

Rails ActiveRecord 库提供了很多非常好的验证器,在这种情况下看起来很合适。

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你的控制器。

于 2013-11-13T00:14:23.630 回答