2017-03-17 8 views
0

Railsプロジェクトの投稿に検証を追加しています。すべてが編集には適していますが、新しいフォームでは、フォームが実際にサブミットされる前にalert divが既に表示されます。バリデーションがfalseを返す場合、フォームの提出時にのみdivが表示されるように修正するにはどうすればよいですか。あなたはこの方法#invalid?を使用する場合は新しいフォームのRails検証がすでに実行されています。

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

答えて

0

あなたのテンプレートにchanged?チェックを追加することができますアトリビュートをアサートする前に検証を呼び出します。あなたが交換する必要がある場合@post.errors.any?

+0

私はフォームに到着したときに私は赤い警告のdivが表示されないので、これは部分的に動作しますが、例えば名前をblanckのままにしておきます)。 – frogtube

+0

すべての場合、正解、元のバージョンは正しくありませんでした。あなたは新しいバージョンを試してみませんか?新しいものが正しく動作することを願っています。 –

+0

最初に戻ると、ページに着くと赤い欄が表示されます。 – frogtube

0

:; Thxを)

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 %> 
関連する問題