在Ruby on Rails中处理异常的正确方法

时间:2015-05-20 01:45:21

标签: ruby-on-rails ruby

我有一个简单的表单,我收集两个字段的用户输入。我已粘贴下面的代码来显示表单。

<%= form_tag("/welcome/index", method: "post") do %>
  <%= label_tag :longitude %><br>
  <%= text_field_tag :longitude %>
  <br>
  <br>
  <%= label_tag :latitude %><br>
  <%= text_field_tag :latitude %>
  <p>
    <%= submit_tag("Submit") %>
  </p>
<% end %>

在控制器中,我捕获用户的输入并显示相关信息。

class WelcomeController < ApplicationController
  # displays the form, so change the name of the form you have now to new.html.erb
  def new
  end

  # the form will pass to this action to perform logic on longitude and latitude
  def create
    longitude = params[:longitude]
    latitude = params[:latitude]
    @stops = Stop.where("longitude = ? AND latitude = ?", longitude, latitude)
    render :index
  end

  # if it renders from the create action, @stops will be available to use here
  def index
  end
end

在某些情况下,用户不会填写表单中的任何内容并点击提交。我想知道如何在Ruby on Rails中正确处理这种情况。我是Ruby on Rails的新手。例如在Java中我会抛出异常说

  

未提供输入

所以我想在这种情况下显示一些消息。如果有人能告诉我如何做到这一点,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

在rails中,您需要在模型上使用Active Record Validations。 http://guides.rubyonrails.org/active_record_validations.html

validates :name, presence: true

有各种方法可以做到这一点,我通常使用angularjs提交表单并将错误返回为JSON,但由于看起来您使用的是标准的html表单操作,因此这里有一个&#34; user&#34;创作形式,

def create
  user = User.create(user_params)
  if @user.save
    flash[:notice] = "User has been created"
    redirect_to user_path(@user)
  else
    flash[:error] = "Somethig is wrong"
    render :new
  end
end



<% form_for @user do |f| %>
  <%= f.error_messages %>
  <%= f.label :name, "Enter your name:" %><br>
  <%= f.text_field :name %><br>
  <%= submit_tag "Send" $>
<% end %>

答案 1 :(得分:0)

您可以检查create方法中的任何一个字段是否为nil:

def create
    longitude = params[:longitude]
    latitude = params[:latitude]
    if(longitude.blank? || latitude.blank?)
      # render something here to display the error
    else
      @stops = Stop.where("longitude = ? AND latitude = ?", longitude, latitude)
      render :index
    end
  end