我真的不知道验证用户输入的建议。我正在开始与RoR。我读了很多关于这个问题的网页,但我从来没有得到过,我想要的是什么。在RoR之前,我用Java编程。我的问题是:如何验证空字段并显示错误消息?这是代码片段:
polls_controller.rb
class PollsController < ApplicationController
def create
@poll = Polls.new
@poll.question = params[:question]
@poll.author_ip = request.remote_ip
end
def show
end
def new
end
def edit
end
end
polls.rb
class Polls < ActiveRecord::Base
has_many :options
validates_presence_of :question, :message => 'Something is wrong...'
end
create.html.erb
<p>
<% form_tag polls_path do %>
<%= label_tag :question, "Enter your question:" %><br>
<%=text_field_tag :question, params[:question] %>
<%=submit_tag "Send" %>
<% end %>
</p>
答案 0 :(得分:8)
首先,不要向验证添加无意义的消息,默认的错误消息是好的。
其次,在控制器中将代码更改为类似的内容:
def new
@pool = Pool.new
end
def create
@pool = Pool.new(params[:pool])
if @pool.save
flash[:notice] = "Some text indicating it was created"
redirect_to pool_path(@pool)
else
flash[:error] = "Something is wrong while validating"
render :new
end
end
并查看use form helper:
<% form_for @pool do |f| %>
<%= f.error_messages %>
<%= f.label :question, "Enter your question:" %><br>
<%= f.text_field :question %><br>
<%= submit_tag "Send" $>
<% end %>
这样您就可以在模式下进行验证,而在控制器中,您只需要检查是否可以保存模型。它不会,然后在您的视图中可以显示error_messages for that model。
用于在布局位置显示flash messages:
<% if flash[:notice] -%>
<p class="notice"><%= flash[:notice] %></p>
<% end -%>
<% if flash[:error] -%>
<p class="error"><%= flash[:error] %></p>
<% end -%>
答案 1 :(得分:1)
我会查看this帖子,一件事。 ActiveForm在这里可以提供很多帮助。 但是,如果你想自己滚动它,你可以很容易地在控制器中添加一些验证,就像这里的海报在他更新的代码版本中所做的那样。
def results
if params[:name] && !params[:name].blank?
@name = params[:name]
else
raise MyApp::MissingFieldError
end
if params[:age] && !params[:age].blank? && params[:age].numeric?
@age = params[:age].to_i
else
raise MyApp::MissingFieldError
end
rescue MyApp::MissingFieldError => err
flash[:error] = "Invalid form submission: #{err.clean_message}"
redirect_to :action => 'index'
end
然后你只需要在你的.erb中显示flash [:errors]。
我还要看一下像this这样的东西。
答案 2 :(得分:0)
包含
<% if flash[:notice] %>
<%= flash[:notice] %>
<% end %>
在您的网页中的某个位置,但最好是app/views/layouts/application.html.erb
。
有关详细信息,请参阅RoR教程。