Problem z wyswietlaniem walidacji modelu Comment

Witam,

mam problem z wyswietlaniem komunikatow walidacji modelu Comment.

W widoku ‘games/show’ mam link do formularza w ktorym dodawany jest komentarz przez uzytkownika:

<%= link_to 'Dodaj komentarz', new_game_comment_path(@game), class: 'btn btn-primary btn-lg' %>

Kod formularza komentarzy (comments/_form.html.erb):

<%= form_for [@game, @comment], html: { class: "form-horizontal" } do |f| %>
  <% if @comment.errors.any? %>
    <%= render 'layouts/errors', object: @comment %>
  <% end %>
...
<% end %>

Kod partiala wyswietlajacy komunikaty bledow (layouts/_errors.html.erb):

<% if object.errors.any? %>
  <div class="alert fade in alert-danger alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    <ul>
      <% object.errors.full_messages.each do |msg| %>
        <%= content_tag :li, msg, :id => "error_#{msg}" if msg.is_a?(String) %>
      <% end %>
    </ul>
  </div>
<% end %>

Kontroler (controllers/comments_controller.rb):

class CommentsController < ApplicationController
  before_action :set_game, only: [:new, :create]
  def new
    @comment = Comment.new(parent_id: params[:parent_id])
  end

  def create
    @comment = @game.comments.new(comment_params)

    if @comment.save
      flash[:success] = 'Twój komentarz został dodany!'
      redirect_to game_url(@game)
    else
      render 'new'
    end
  end

  private

  def set_game
    @game = Game.friendly.find(params[:game_id])
  end

  def comment_params
    params.require(:comment).permit(:title, :body, :author, :game_id)
  end
end

Niestety przy probie dodania komentarza bez wypelniania pol takich jak autor, tresc i tytul nie wyswietlane sa komunikaty walidacji. W konsoli przy probie dodania takiego komentarza pojawiaja sie takie komunikaty:

2.2.0 :005 > comment = Comment.new
 => #<Comment id: nil, title: nil, author: nil, body: nil, created_at: nil, updated_at: nil, game_id: nil, parent_id: nil, user_id: nil> 
2.2.0 :006 > comment.save
   (0.1ms)  begin transaction
   (0.1ms)  rollback transaction
 => false 
2.2.0 :007 > comment.errors.full_messages
 => ["Title nie może być puste", "Author nie może być puste", "Body nie może być puste"] 
2.2.0 :008 > 

Niestety nie wiem gdzie popelnilem blad. Prosze o pomoc jesli kiedy mieliscie podobny blad.

Model comment.rb

class Comment < ActiveRecord::Base
  belongs_to :game
  belongs_to :comment
  validates :title, :author, :body, presence: true
end

Mial ktos moze podobny problem? Pogubilem sie i brakuje mi pomyslow.

Wrzuć debugger najpierw do widoku, potem do kontrolera i sprawdź gdzie nie leci to czego oczekujesz.

Odkrylem ze przy probie dodania komentarza pustego nie nastepuje wogole renderowanie widoku new.html.erb

if @comment.save
  flash[:success] = 'Twój komentarz został dodany!'
  redirect_to game_url(@game)
 else
   Rails.logger.debug(@comment.errors)
   render 'new'
 end

Komentarz jest nie dodany ale w logach nie widze zeby cos sie dzialo. Nie nastepuje przekierowanie.

Caly czas sie z tym mecze, czy ktos ma jakis pomysl? Wogole nic sie nie dzieje przy probie utworzenia pustego komentarza. Logi sa puste dla tej akcji to tak jakby rails nie przetwarzalo tej akcji.

A nie jest przypadkiem tak że masz źle route-y napisane?
post 'games/:id/comments' => 'comments#new', as: :create_comment
resources :games do
resources :comments
end

Wystarczy że popełniłeś błąd jak ten w przykładzie powyżej i Twój post tak na prawdę odpala inną akcję. W tym przypadku new, co skończy się tym że naciskając submit button jeszcze raz wygenerujesz formularz

hej routy sa wygladaja jak ponizej:

resources :games do
resources :comments, only: [:new, :create]
end

Z tego co napisałeś nie mogę wywnioskować co się pojawia na ekranie jak dajesz zapisz.
Pusty ekran, formularz?
Co masz zalogowane dla tego wywołania? Przeklej log z terminala.
Na pewno nie masz jakiegoś before_filtera na poziomie ApplicationController?

Jak daje zapisz nic sie nie dzieje jesli pola formularza sa puste. Jesli pola formularza sa wypelnione natepuje przekierowanie i komentarz zostaje dodany.

Logi tez sie nie zmieniaja po kliknieciu przycisku Zapisz ale wklejam logi od momentu kliknieciu przycisku dodaj komentarz:

Started GET "/games/test-bdc2b1e0-1680-4d70-a914-1a21fe9b34fd/comments/new" for ::1 at 2015-02-16 23:07:13 +0100
Processing by CommentsController#new as HTML
  Parameters: {"game_id"=>"test-bdc2b1e0-1680-4d70-a914-1a21fe9b34fd"}
  Game Load (7.4ms)  SELECT  "games".* FROM "games" WHERE "games"."slug" = ?  ORDER BY "games"."id" ASC LIMIT 1  [["slug", "test-bdc2b1e0-1680-4d70-a914-1a21fe9b34fd"]]
  Rendered comments/_form.html.erb (3.6ms)
  Rendered comments/new.html.erb within layouts/application (17.9ms)
  Rendered layouts/_menu.html.erb (0.2ms)
  Category Load (0.3ms)  SELECT "categories".* FROM "categories"
   (0.1ms)  SELECT COUNT(*) FROM "games" WHERE "games"."category_id" = ? AND "games"."published" = 't'  [["category_id", 16]]
   (0.1ms)  SELECT COUNT(*) FROM "games" WHERE "games"."category_id" = ? AND "games"."published" = 't'  [["category_id", 17]]
   (0.1ms)  SELECT COUNT(*) FROM "games" WHERE "games"."category_id" = ? AND "games"."published" = 't'  [["category_id", 18]]
   (0.1ms)  SELECT COUNT(*) FROM "games" WHERE "games"."category_id" = ? AND "games"."published" = 't'  [["category_id", 19]]
   (0.3ms)  SELECT COUNT(*) FROM "games" WHERE "games"."category_id" = ? AND "games"."published" = 't'  [["category_id", 20]]
   (0.1ms)  SELECT COUNT(*) FROM "games" WHERE "games"."category_id" = ? AND "games"."published" = 't'  [["category_id", 21]]
   (0.1ms)  SELECT COUNT(*) FROM "games" WHERE "games"."category_id" = ? AND "games"."published" = 't'  [["category_id", 22]]
   (0.1ms)  SELECT COUNT(*) FROM "games" WHERE "games"."category_id" = ? AND "games"."published" = 't'  [["category_id", 23]]
   (0.1ms)  SELECT COUNT(*) FROM "games" WHERE "games"."category_id" = ? AND "games"."published" = 't'  [["category_id", 24]]
   (0.1ms)  SELECT COUNT(*) FROM "games" WHERE "games"."category_id" = ? AND "games"."published" = 't'  [["category_id", 25]]
   (0.1ms)  SELECT COUNT(*) FROM "games" WHERE "games"."category_id" = ? AND "games"."published" = 't'  [["category_id", 26]]
   (0.1ms)  SELECT COUNT(*) FROM "games" WHERE "games"."category_id" = ? AND "games"."published" = 't'  [["category_id", 27]]
   (0.1ms)  SELECT COUNT(*) FROM "games" WHERE "games"."category_id" = ? AND "games"."published" = 't'  [["category_id", 28]]
   (0.1ms)  SELECT COUNT(*) FROM "games" WHERE "games"."category_id" = ? AND "games"."published" = 't'  [["category_id", 29]]
  Rendered layouts/_messages.html.erb (0.1ms)
Completed 200 OK in 264ms (Views: 248.7ms | ActiveRecord: 9.3ms)

I po probie dodania pustego komentarza logi zostaja takie same - zero reakcji.

Mam before_filter w CommentsController:

 before_filter :authenticate_user!, except: [:new, :create]

ale to nie jest przyczyna tego dziwnego zachowania.

Jeśli teraz Ci nie pomogę to najwcześniej jutro.
Określenie ‘nic się nie dzieje’, sugeruje że do serwera nie idzie żaden request.
W kodzie który podałeś na górze nie ma fragmentu gdzie generujesz wszystkie inputy, ale może masz coś takiego

i wtedy formularz nie zostanie submitowany, a z jakiegoś powodu nie widzisz walidacji po stronie klienta (normalnie powinieneś dostać jakiś popup że pole jest wymagane)

dziekuje, tak to byla przyczyna required: true w polach formularza. Zastanawialem sie tez dlaczego walidacja HTML5 nie dziala na tych polach i nie pojawia sie zaden popup i to mnie zmylilo. Dziekuje raz jeszcze. Pozdrawiam!