Ruby on rails 如何显示集合中每个元素的验证错误?
我正在修改我刚刚完成的博客。 我现在想显示的是,在验证评论时是否有错误,方法与我在验证文章时显示的方法相同 我已经在模型中建立了相应的限制,并且实际上是有效的,因为当您想要使用违反限制的值进行注释时,系统不会保存注释,但用户不知道为什么会发生这种情况Ruby on rails 如何显示集合中每个元素的验证错误?,ruby-on-rails,ruby,validation,Ruby On Rails,Ruby,Validation,我正在修改我刚刚完成的博客。 我现在想显示的是,在验证评论时是否有错误,方法与我在验证文章时显示的方法相同 我已经在模型中建立了相应的限制,并且实际上是有效的,因为当您想要使用违反限制的值进行注释时,系统不会保存注释,但用户不知道为什么会发生这种情况 Articulo意思是一篇文章 Comentar表示评论 Comentario表示评论 Comentarios表示评论 附件一些文件: /app/controllers/articulos\u controller.rb class Artic
- Articulo意思是一篇文章
- Comentar表示评论
- Comentario表示评论
- Comentarios表示评论
class ArticulosController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secreto", except: [:index, :show]
def index
@articulos = Articulo.all
end
def show
@articulo = Articulo.find(params[:id])
end
def new
@articulo = Articulo.new
end
def edit
@articulo = Articulo.find(params[:id])
end
def create
@articulo = Articulo.new(articulo_params)
if @articulo.save
redirect_to @articulo
else
render 'new'
end
end
def update
@articulo = Articulo.find(params[:id])
if @articulo.update(articulo_params)
redirect_to @articulo
else
render 'edit'
end
end
def destroy
@articulo = Articulo.find(params[:id])
@articulo.destroy
redirect_to articulos_path
end
private
def articulo_params
params.require(:articulo).permit(:titular, :contenido)
end
end
class ComentariosController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secreto", only: :destroy
def new
articulo = Articulo.find(params[:id])
@comentario = articulo.comentarios.build
end
def create
@articulo = Articulo.find(params[:articulo_id])
@comentario = @articulo.comentarios.create(comentario_params)
redirect_to articulo_path(@articulo)
end
def destroy
@articulo = Articulo.find(params[:articulo_id])
@comentario = @articulo.comentarios.find(params[:id])
@comentario.destroy
redirect_to articulo_path(@articulo)
end
private
def comentario_params
params.require(:comentario).permit(:comentarista, :contenido)
end
end
class Articulo < ApplicationRecord
has_many :comentarios
validates :titular, presence: true, length: { minimum: 5 }
validates :contenido, presence: true, length: { minimum: 10 }
end
class Comentario < ApplicationRecord
belongs_to :articulo
validates :comentarista, presence: true, length: { minimum: 4 }
validates :contenido, presence: true, length: { minimum: 2 }
end
<%= form_for @articulo do |f| %>
<% if @articulo.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@articulo.errors.count, "error") %> han impedido que el artículo sea grabado:
</h2>
<ul>
<% @articulo.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :titular %><br>
<%= f.text_field :titular %>
</p>
<p>
<%= f.label :contenido %><br>
<%= f.text_area :contenido %>
</p>
<p>
<%= f.submit 'Guardar' %>
</p>
<% end %>
<%= form_for([@articulo, @articulo.comentarios.build]) do |f| %>
<p>
Nombre<br>
<%= f.text_field :comentarista %>
</p>
<p>
Comentario<br>
<%= f.text_area :contenido %>
</p>
<p>
<%= f.submit 'Comentar' %>
</p>
<% end %>
<%= render 'shared/error_messages', object: f.object %>
class ArticulosController
/app/controllers/comentarios\u controller.rb
class ArticulosController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secreto", except: [:index, :show]
def index
@articulos = Articulo.all
end
def show
@articulo = Articulo.find(params[:id])
end
def new
@articulo = Articulo.new
end
def edit
@articulo = Articulo.find(params[:id])
end
def create
@articulo = Articulo.new(articulo_params)
if @articulo.save
redirect_to @articulo
else
render 'new'
end
end
def update
@articulo = Articulo.find(params[:id])
if @articulo.update(articulo_params)
redirect_to @articulo
else
render 'edit'
end
end
def destroy
@articulo = Articulo.find(params[:id])
@articulo.destroy
redirect_to articulos_path
end
private
def articulo_params
params.require(:articulo).permit(:titular, :contenido)
end
end
class ComentariosController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secreto", only: :destroy
def new
articulo = Articulo.find(params[:id])
@comentario = articulo.comentarios.build
end
def create
@articulo = Articulo.find(params[:articulo_id])
@comentario = @articulo.comentarios.create(comentario_params)
redirect_to articulo_path(@articulo)
end
def destroy
@articulo = Articulo.find(params[:articulo_id])
@comentario = @articulo.comentarios.find(params[:id])
@comentario.destroy
redirect_to articulo_path(@articulo)
end
private
def comentario_params
params.require(:comentario).permit(:comentarista, :contenido)
end
end
class Articulo < ApplicationRecord
has_many :comentarios
validates :titular, presence: true, length: { minimum: 5 }
validates :contenido, presence: true, length: { minimum: 10 }
end
class Comentario < ApplicationRecord
belongs_to :articulo
validates :comentarista, presence: true, length: { minimum: 4 }
validates :contenido, presence: true, length: { minimum: 2 }
end
<%= form_for @articulo do |f| %>
<% if @articulo.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@articulo.errors.count, "error") %> han impedido que el artículo sea grabado:
</h2>
<ul>
<% @articulo.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :titular %><br>
<%= f.text_field :titular %>
</p>
<p>
<%= f.label :contenido %><br>
<%= f.text_area :contenido %>
</p>
<p>
<%= f.submit 'Guardar' %>
</p>
<% end %>
<%= form_for([@articulo, @articulo.comentarios.build]) do |f| %>
<p>
Nombre<br>
<%= f.text_field :comentarista %>
</p>
<p>
Comentario<br>
<%= f.text_area :contenido %>
</p>
<p>
<%= f.submit 'Comentar' %>
</p>
<% end %>
<%= render 'shared/error_messages', object: f.object %>
类ComentariosController
/app/models/articulo.rb
class ArticulosController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secreto", except: [:index, :show]
def index
@articulos = Articulo.all
end
def show
@articulo = Articulo.find(params[:id])
end
def new
@articulo = Articulo.new
end
def edit
@articulo = Articulo.find(params[:id])
end
def create
@articulo = Articulo.new(articulo_params)
if @articulo.save
redirect_to @articulo
else
render 'new'
end
end
def update
@articulo = Articulo.find(params[:id])
if @articulo.update(articulo_params)
redirect_to @articulo
else
render 'edit'
end
end
def destroy
@articulo = Articulo.find(params[:id])
@articulo.destroy
redirect_to articulos_path
end
private
def articulo_params
params.require(:articulo).permit(:titular, :contenido)
end
end
class ComentariosController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secreto", only: :destroy
def new
articulo = Articulo.find(params[:id])
@comentario = articulo.comentarios.build
end
def create
@articulo = Articulo.find(params[:articulo_id])
@comentario = @articulo.comentarios.create(comentario_params)
redirect_to articulo_path(@articulo)
end
def destroy
@articulo = Articulo.find(params[:articulo_id])
@comentario = @articulo.comentarios.find(params[:id])
@comentario.destroy
redirect_to articulo_path(@articulo)
end
private
def comentario_params
params.require(:comentario).permit(:comentarista, :contenido)
end
end
class Articulo < ApplicationRecord
has_many :comentarios
validates :titular, presence: true, length: { minimum: 5 }
validates :contenido, presence: true, length: { minimum: 10 }
end
class Comentario < ApplicationRecord
belongs_to :articulo
validates :comentarista, presence: true, length: { minimum: 4 }
validates :contenido, presence: true, length: { minimum: 2 }
end
<%= form_for @articulo do |f| %>
<% if @articulo.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@articulo.errors.count, "error") %> han impedido que el artículo sea grabado:
</h2>
<ul>
<% @articulo.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :titular %><br>
<%= f.text_field :titular %>
</p>
<p>
<%= f.label :contenido %><br>
<%= f.text_area :contenido %>
</p>
<p>
<%= f.submit 'Guardar' %>
</p>
<% end %>
<%= form_for([@articulo, @articulo.comentarios.build]) do |f| %>
<p>
Nombre<br>
<%= f.text_field :comentarista %>
</p>
<p>
Comentario<br>
<%= f.text_area :contenido %>
</p>
<p>
<%= f.submit 'Comentar' %>
</p>
<% end %>
<%= render 'shared/error_messages', object: f.object %>
class Articulo
/app/models/comentario.rb
class ArticulosController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secreto", except: [:index, :show]
def index
@articulos = Articulo.all
end
def show
@articulo = Articulo.find(params[:id])
end
def new
@articulo = Articulo.new
end
def edit
@articulo = Articulo.find(params[:id])
end
def create
@articulo = Articulo.new(articulo_params)
if @articulo.save
redirect_to @articulo
else
render 'new'
end
end
def update
@articulo = Articulo.find(params[:id])
if @articulo.update(articulo_params)
redirect_to @articulo
else
render 'edit'
end
end
def destroy
@articulo = Articulo.find(params[:id])
@articulo.destroy
redirect_to articulos_path
end
private
def articulo_params
params.require(:articulo).permit(:titular, :contenido)
end
end
class ComentariosController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secreto", only: :destroy
def new
articulo = Articulo.find(params[:id])
@comentario = articulo.comentarios.build
end
def create
@articulo = Articulo.find(params[:articulo_id])
@comentario = @articulo.comentarios.create(comentario_params)
redirect_to articulo_path(@articulo)
end
def destroy
@articulo = Articulo.find(params[:articulo_id])
@comentario = @articulo.comentarios.find(params[:id])
@comentario.destroy
redirect_to articulo_path(@articulo)
end
private
def comentario_params
params.require(:comentario).permit(:comentarista, :contenido)
end
end
class Articulo < ApplicationRecord
has_many :comentarios
validates :titular, presence: true, length: { minimum: 5 }
validates :contenido, presence: true, length: { minimum: 10 }
end
class Comentario < ApplicationRecord
belongs_to :articulo
validates :comentarista, presence: true, length: { minimum: 4 }
validates :contenido, presence: true, length: { minimum: 2 }
end
<%= form_for @articulo do |f| %>
<% if @articulo.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@articulo.errors.count, "error") %> han impedido que el artículo sea grabado:
</h2>
<ul>
<% @articulo.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :titular %><br>
<%= f.text_field :titular %>
</p>
<p>
<%= f.label :contenido %><br>
<%= f.text_area :contenido %>
</p>
<p>
<%= f.submit 'Guardar' %>
</p>
<% end %>
<%= form_for([@articulo, @articulo.comentarios.build]) do |f| %>
<p>
Nombre<br>
<%= f.text_field :comentarista %>
</p>
<p>
Comentario<br>
<%= f.text_area :contenido %>
</p>
<p>
<%= f.submit 'Comentar' %>
</p>
<% end %>
<%= render 'shared/error_messages', object: f.object %>
class Comentario
/app/views/articulos/_-form.html.erb
class ArticulosController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secreto", except: [:index, :show]
def index
@articulos = Articulo.all
end
def show
@articulo = Articulo.find(params[:id])
end
def new
@articulo = Articulo.new
end
def edit
@articulo = Articulo.find(params[:id])
end
def create
@articulo = Articulo.new(articulo_params)
if @articulo.save
redirect_to @articulo
else
render 'new'
end
end
def update
@articulo = Articulo.find(params[:id])
if @articulo.update(articulo_params)
redirect_to @articulo
else
render 'edit'
end
end
def destroy
@articulo = Articulo.find(params[:id])
@articulo.destroy
redirect_to articulos_path
end
private
def articulo_params
params.require(:articulo).permit(:titular, :contenido)
end
end
class ComentariosController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secreto", only: :destroy
def new
articulo = Articulo.find(params[:id])
@comentario = articulo.comentarios.build
end
def create
@articulo = Articulo.find(params[:articulo_id])
@comentario = @articulo.comentarios.create(comentario_params)
redirect_to articulo_path(@articulo)
end
def destroy
@articulo = Articulo.find(params[:articulo_id])
@comentario = @articulo.comentarios.find(params[:id])
@comentario.destroy
redirect_to articulo_path(@articulo)
end
private
def comentario_params
params.require(:comentario).permit(:comentarista, :contenido)
end
end
class Articulo < ApplicationRecord
has_many :comentarios
validates :titular, presence: true, length: { minimum: 5 }
validates :contenido, presence: true, length: { minimum: 10 }
end
class Comentario < ApplicationRecord
belongs_to :articulo
validates :comentarista, presence: true, length: { minimum: 4 }
validates :contenido, presence: true, length: { minimum: 2 }
end
<%= form_for @articulo do |f| %>
<% if @articulo.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@articulo.errors.count, "error") %> han impedido que el artículo sea grabado:
</h2>
<ul>
<% @articulo.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :titular %><br>
<%= f.text_field :titular %>
</p>
<p>
<%= f.label :contenido %><br>
<%= f.text_area :contenido %>
</p>
<p>
<%= f.submit 'Guardar' %>
</p>
<% end %>
<%= form_for([@articulo, @articulo.comentarios.build]) do |f| %>
<p>
Nombre<br>
<%= f.text_field :comentarista %>
</p>
<p>
Comentario<br>
<%= f.text_area :contenido %>
</p>
<p>
<%= f.submit 'Comentar' %>
</p>
<% end %>
<%= render 'shared/error_messages', object: f.object %>
海洋地堑:
/app/views/comentarios/\u form.html.erb
class ArticulosController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secreto", except: [:index, :show]
def index
@articulos = Articulo.all
end
def show
@articulo = Articulo.find(params[:id])
end
def new
@articulo = Articulo.new
end
def edit
@articulo = Articulo.find(params[:id])
end
def create
@articulo = Articulo.new(articulo_params)
if @articulo.save
redirect_to @articulo
else
render 'new'
end
end
def update
@articulo = Articulo.find(params[:id])
if @articulo.update(articulo_params)
redirect_to @articulo
else
render 'edit'
end
end
def destroy
@articulo = Articulo.find(params[:id])
@articulo.destroy
redirect_to articulos_path
end
private
def articulo_params
params.require(:articulo).permit(:titular, :contenido)
end
end
class ComentariosController < ApplicationController
http_basic_authenticate_with name: "dhh", password: "secreto", only: :destroy
def new
articulo = Articulo.find(params[:id])
@comentario = articulo.comentarios.build
end
def create
@articulo = Articulo.find(params[:articulo_id])
@comentario = @articulo.comentarios.create(comentario_params)
redirect_to articulo_path(@articulo)
end
def destroy
@articulo = Articulo.find(params[:articulo_id])
@comentario = @articulo.comentarios.find(params[:id])
@comentario.destroy
redirect_to articulo_path(@articulo)
end
private
def comentario_params
params.require(:comentario).permit(:comentarista, :contenido)
end
end
class Articulo < ApplicationRecord
has_many :comentarios
validates :titular, presence: true, length: { minimum: 5 }
validates :contenido, presence: true, length: { minimum: 10 }
end
class Comentario < ApplicationRecord
belongs_to :articulo
validates :comentarista, presence: true, length: { minimum: 4 }
validates :contenido, presence: true, length: { minimum: 2 }
end
<%= form_for @articulo do |f| %>
<% if @articulo.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@articulo.errors.count, "error") %> han impedido que el artículo sea grabado:
</h2>
<ul>
<% @articulo.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :titular %><br>
<%= f.text_field :titular %>
</p>
<p>
<%= f.label :contenido %><br>
<%= f.text_area :contenido %>
</p>
<p>
<%= f.submit 'Guardar' %>
</p>
<% end %>
<%= form_for([@articulo, @articulo.comentarios.build]) do |f| %>
<p>
Nombre<br>
<%= f.text_field :comentarista %>
</p>
<p>
Comentario<br>
<%= f.text_area :contenido %>
</p>
<p>
<%= f.submit 'Comentar' %>
</p>
<% end %>
<%= render 'shared/error_messages', object: f.object %>
名称
科门塔里奥
验证时如何显示此类错误?
非常感谢您。您应该创建一个错误消息部分app/views/shared/\u error\u messages.html.erb如下:
<% if object.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(object.errors.count, "error") %> han impedido que el
artículo sea grabado: # change artículo to the appropriate word
</h2>
<ul>
<% object.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
您已经在
/app/views/articulos/_form.html.erb
模板中找到了答案,请查看那里并检查错误是如何显示的。不确定您的问题,如果验证失败,是否要发送自定义消息???@fanta但在/app/views/articulos/_form.html.erb中我有
,然后在/app/views/comentarios/_form.html.erb中,我有了
。它们不一样,我试图调整它,但它不起作用。@AlejandroMontilla验证一篇文章时,如果它不符合任何限制,将显示错误消息。我想做的是做同样的事情,但是对一些文章的每一个评论。看看这篇文章:不,它不起作用。评论的错误消息不显示。我已经自己解决了。无论如何,谢谢你的贡献。