新表单上的Rails验证在提交之前已经完成

时间:2017-03-17 00:10:09

标签: ruby-on-rails

我正在为我的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 %>

2 个答案:

答案 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?