简介所有这些代码均来自http://guides.rubyonrails.org/getting_started.html
有问题的消息:
1 error prohibited this article from being saved:
Title is too short (minimum is 5 characters)
代码第1部分定义参数
class Article < ActiveRecord::Base
validates :title, presence: true,
length: { minimum: 5 }
end
代码第2部分错误消息
<% if @article.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@article.errors.count, "error") %> prohibited
this article from being saved:</h2>
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
答案 0 :(得分:2)
错误消息来自您的控制器和型号的组合。
def new
@article = Article.new
end
def create
@article = Article.new(article_params)
if @article.save # the magic happens here
redirect_to @article
else
render 'new'
end
end
private
def article_params
params.require(:article).permit(:title, :text)
end
当你打电话给@ article.save时,你问你的模特'这篇新文章的标题长度至少为5个字符?'。如果是,则文章将保存到数据库中,您将被重定向到@article。
if @article.save
redirect_to @article
如果没有,它将使用@ articles.errors.messages
重新渲染新页面(渲染'new')else
render 'new'
end
使您的文章模型化实例变量@article允许您将模型所具有的任何数据/方法携带到视图中。在这种情况下,您可以将错误消息带入新表单。你的新表格代码在这里检测@article是否有错误,也就是说如果调用@ article.errors.any?返回大于0的消息数组。
<% if @article.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@article.errors.count, "error") %> prohibited
this article from being saved:</h2>
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
所以在你的情况下,你的标题太短了。这段代码接受了这个单一错误,对你的h2标签的消息使用复数魔术,然后列出@ articles.errors.full_messages.each块中的每个错误。
答案 1 :(得分:1)
在这种情况下,Article是ActiveRecord对象。这意味着它继承了某些行为(能力)。在这种情况下,当提交的标题不符合“验证”时。在代码部分1中的行,它向文章添加了错误操作。
在您的代码的第2部分之后,&#39; full_messages&#39;我已经提到的错误正在调用行动。这就是你所询问的信息来自哪里。在rails控制台中尝试它并尝试保存一个没有通过验证的对象。然后在其上调用@ article.errors.full_messages操作并查看。
为了扩展一点,“错误”和“错误”这里将是ActiveRecord错误对象。 full_messages几乎是一个包含每个错误文本的数组(例如&#34;标题太短。&#34;