在 Rails 上使用 Ruby 中的 ActiveModel 进行验证 4 似乎无法正常工作
Validating with ActiveModel in Ruby on Rails 4 Seemingly not Working
当我将数据输入我知道应该失败的表单时,它并没有失败。根据我下面的模型,我要求数据是 a-z、A-Z、0-9 和空格的任意组合,当我用 )(&^%^&(*&%^&** 甚至提交一个空字段,我预计会有错误。在这种情况下,没有。
这是模型的突出部分:
class Numerology
include ActiveModel::Model
attr_accessor :phrase
VALID_PHRASE_REGEX = /\A[a-zA-Z0-9\s]+\z/
validates :phrase, presence: true, length: { minimum: 1 },
format: { with: VALID_PHRASE_REGEX }
这是控制器...我想要它做的是返回索引(上面有表单的页面)以及当我在表单上提供错误输入时生成的任何错误。不确定我在这里的处理方式是否正确,但我认为这可能是次要问题,因为我似乎根本没有生成任何错误(所以当然 @numerology.errors.any? 会是错误的) .
class NumerologiesController < ApplicationController
before_filter :authenticate_user!
respond_to :html
def index
@numerology = Numerology.new
end
def create
@numerology = Numerology.new(params[:numerology])
if @numerology.errors.any?
render :index
else
@numresults = Numerology.analysis(params[:numerology][:phrase])
end
end
end
最后,这里是视图,首先是索引,然后是创建:
索引页:
<div class="center jumbotron">
<h1>Numerology Analysis Module</h1>
<br>
<%= bootstrap_form_for(@numerology, layout: :horizontal, label_col: "col-sm-4", control_col: "col-sm-6") do |f| %>
<p> Enter word or phrase to be analyzed in the field below (Required).</p>
<%= @numerology.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
<%= f.text_field :phrase, label: "Word or Phrase: " %>
<br><br>
<%= f.submit "Perform Numerological Analysis" %>
<% end %>
<br><br>
<%= image_tag("SMILE.jpg", alt: "Smiley Face") %>
</div>
创建页面:
<div class="center jumbotron">
<h1>Numerological Analysis Report</h1>
<div class="numreport">
<table class="numtable">
<% @numresults.each do |line| %>
<% if !line.nil? %>
<tr>
<td><%= "#{line}" %></td>
</tr>
<% end %>
<% end -%>
</table>
</div>
<%= link_to "Perform Another Numerological Analysis - Click Here", numerologies_path %>
<br><br><br>
<%= image_tag("SMILE.jpg", alt: "Smiley Face") %>
</div>
所以,有人看到我在这里做错了什么吗?建议尝试其他事情?谢谢!
您需要调用 valid?
或 invalid?
才能填充错误列表。
http://api.rubyonrails.org/classes/ActiveModel/Validations.html#method-i-valid-3F
valid?(context = nil)
Runs all the specified validations and returns true if no errors were
added otherwise false.
def create
@numerology = Numerology.new(params[:numerology])
if @numerology.invalid?
render :index
else
@numresults = Numerology.analysis(params[:numerology][:phrase])
end
end
当我将数据输入我知道应该失败的表单时,它并没有失败。根据我下面的模型,我要求数据是 a-z、A-Z、0-9 和空格的任意组合,当我用 )(&^%^&(*&%^&** 甚至提交一个空字段,我预计会有错误。在这种情况下,没有。
这是模型的突出部分:
class Numerology
include ActiveModel::Model
attr_accessor :phrase
VALID_PHRASE_REGEX = /\A[a-zA-Z0-9\s]+\z/
validates :phrase, presence: true, length: { minimum: 1 },
format: { with: VALID_PHRASE_REGEX }
这是控制器...我想要它做的是返回索引(上面有表单的页面)以及当我在表单上提供错误输入时生成的任何错误。不确定我在这里的处理方式是否正确,但我认为这可能是次要问题,因为我似乎根本没有生成任何错误(所以当然 @numerology.errors.any? 会是错误的) .
class NumerologiesController < ApplicationController
before_filter :authenticate_user!
respond_to :html
def index
@numerology = Numerology.new
end
def create
@numerology = Numerology.new(params[:numerology])
if @numerology.errors.any?
render :index
else
@numresults = Numerology.analysis(params[:numerology][:phrase])
end
end
end
最后,这里是视图,首先是索引,然后是创建:
索引页:
<div class="center jumbotron">
<h1>Numerology Analysis Module</h1>
<br>
<%= bootstrap_form_for(@numerology, layout: :horizontal, label_col: "col-sm-4", control_col: "col-sm-6") do |f| %>
<p> Enter word or phrase to be analyzed in the field below (Required).</p>
<%= @numerology.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
<%= f.text_field :phrase, label: "Word or Phrase: " %>
<br><br>
<%= f.submit "Perform Numerological Analysis" %>
<% end %>
<br><br>
<%= image_tag("SMILE.jpg", alt: "Smiley Face") %>
</div>
创建页面:
<div class="center jumbotron">
<h1>Numerological Analysis Report</h1>
<div class="numreport">
<table class="numtable">
<% @numresults.each do |line| %>
<% if !line.nil? %>
<tr>
<td><%= "#{line}" %></td>
</tr>
<% end %>
<% end -%>
</table>
</div>
<%= link_to "Perform Another Numerological Analysis - Click Here", numerologies_path %>
<br><br><br>
<%= image_tag("SMILE.jpg", alt: "Smiley Face") %>
</div>
所以,有人看到我在这里做错了什么吗?建议尝试其他事情?谢谢!
您需要调用 valid?
或 invalid?
才能填充错误列表。
http://api.rubyonrails.org/classes/ActiveModel/Validations.html#method-i-valid-3F
valid?(context = nil)
Runs all the specified validations and returns true if no errors were added otherwise false.
def create
@numerology = Numerology.new(params[:numerology])
if @numerology.invalid?
render :index
else
@numresults = Numerology.analysis(params[:numerology][:phrase])
end
end