我有一个简单的表单,我收集两个字段的用户输入。我已粘贴下面的代码来显示表单。
<%= 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中我会抛出异常说
未提供输入
所以我想在这种情况下显示一些消息。如果有人能告诉我如何做到这一点,我将不胜感激。
答案 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