如何检查数据库是否包含Ruby on Rails中的值?

时间:2013-11-12 23:15:11

标签: mysql ruby-on-rails methods syntax implementation

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

快速提问。

我正在完成我的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为此提供的简单实现。谢谢!

2 个答案:

答案 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