在提交之前对新表单进行Rails验证

问题描述:

我在我的Rails项目中为我的帖子添加验证。一切都适用于编辑,但在新窗体上,警告div已经出现在表单实际上被引用之前。我如何解决它的方式,只有在验证返回false时,div才会出现在表单提交中。 THX)在提交之前对新表单进行Rails验证

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 %> 

您可以添加changed?检查您的模板:

<% if @post.changed? && @post.invalid? %> 
    <div class="alert alert-danger"> 
    <% @post.errors.full_messages.each do |message| %> 
     <%= message %><br> 
    <% end %> 
    </div> 
<% end %> 
+0

这部分工作,因为我没有看到红色警戒div时,我到达窗体中,但我没有看到它,当我现在如果我不'通过验证例如留下姓名blanck)。 – frogtube

+0

对,原始版本在所有情况下都不正确。你可以尝试新版本吗?希望新人能正确工作。 –

+0

回到最初,当我到达页面时,红色div在那里。 – frogtube

如果使用#invalid?这种方法在分配任何属性之前调用验证。您需要替换如果@[email protected]与如果@post.errors.any?