我正在为我的Rails项目中的帖子添加验证。一切都适用于编辑,但在新表单上,警报div已经显示在表单实际提交之前。如果验证返回false,我如何以div仅在提交表单时出现的方式修复它。 谢谢;)
posts_controller
def new
@post = Post.new
end
def create
post = Post.new(post_params)
if post.valid?
post.save
redirect_to post_path(post.id), success: "..."
else
@post = post
render 'new'
end
end
new.html.erb
<h1>Nouvel article</h1>
<% if @post.invalid? %>
<div class="alert alert-danger">
<% @post.errors.full_messages.each do |message| %>
<%= message %><br>
<% end %>
</div>
<% end %>
<%= form_for @post do |f| %>
<div class="form-group">
<label>Titre de l'article</label>
<%= f.text_field :name, class: "form-control" %><br />
<label>Contenu de l'article</label>
<%= f.text_area :content, class: "form-control" %>
</div>
<div class="form-group">
<button type="submit" class="btn btn-success">...</button>
</div>
<% end %>
答案 0 :(得分:0)
您可以在模板中添加changed?
支票:
<% if @post.changed? && @post.invalid? %>
<div class="alert alert-danger">
<% @post.errors.full_messages.each do |message| %>
<%= message %><br>
<% end %>
</div>
<% end %>
答案 1 :(得分:0)
如果您使用#invalid?
,此方法会在您分配任何属性之前调用验证。您需要使用if @post.invalid@
@post.errors.any?