Problem w tym ze partial komentarza jest renderowany pomimo ze warunek zwraca false:
Post Load (2.1ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = ? LIMIT 1 [["id", 5]]
=> #<Post id: 5, title: "dasdasd", introduction: "dsadas", ingredients_title: "dasdasdas", ingredients: "ddasdas\r\ndasdasd", preparation_title: "dasdsa", preparation: "dasdas\r\ndasdas", created_at: "2013-10-09 22:41:51", updated_at: "2013-10-09 22:41:51">
2.0.0p247 :002 > @post.comments.any?
Comment Exists (0.2ms) SELECT 1 AS one FROM "comments" WHERE "comments"."post_id" = ? LIMIT 1 [["post_id", 5]]
=> false
2.0.0p247 :003 >
Kod w widoku:
<!-- the comments -->
<% if @post.comments.any? %>
<%= render @post.comments %>
<% else %>
<strong>Nobody comments on this post</strong>
<% end %>
Logi:
Started GET "/posts/5" for 127.0.0.1 at 2013-10-10 21:02:21 +0200
ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
Processing by PostsController#show as HTML
Parameters: {"id"=>"5"}
Post Load (0.2ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = ? LIMIT 1 [["id", "5"]]
Asset Load (2.0ms) SELECT "assets".* FROM "assets" WHERE "assets"."post_id" = ? ORDER BY "assets"."id" ASC LIMIT 1 [["post_id", 5]]
Asset Load (0.3ms) SELECT "assets".* FROM "assets" WHERE "assets"."post_id" = ? [["post_id", 5]]
Rendered comments/_form.html.erb (82.4ms)
Comment Load (0.3ms) SELECT "comments".* FROM "comments" WHERE "comments"."post_id" = ? [["post_id", 5]]
Post Load (0.2ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = ? ORDER BY "posts"."id" ASC LIMIT 1 [["id", 5]]
Rendered comments/_comment.html.erb (3.8ms)
Rendered posts/show.html.erb within layouts/application (176.1ms)
Completed 200 OK in 579ms (Views: 491.7ms | ActiveRecord: 4.0ms)
IMHO na widoku (ewentualnie w kontrolerze) się coś krzaczy, więc testy w konsoli raczej nie odzwierciedlają rzeczywistości i nie pozwolą na zreprodukowanie problemu.
Formularz nie jest tutaj przyczyna, formularz wyswietla sie poprawnie. Problemem jest ponizszy kod:
<!-- the comments -->
<% if @post.comments.any? %>
<%= render @post.comments %>
<% else %>
<strong>Nobody comments on this post</strong>
<% end %>
Zamiast wyswietlac komunikat: “Nobody comments on this post”
partial ten wyswietla pusty komentarz z metoda ‘Destroy’ ktora mam w formularzu. Nie moge nawet skasowac tego komentarza poniewaz on nie istnieje
Faktycznie, ciężko wyjaśnić to dziwne zachowanie inaczej niż sugerowałem ja i ddknapik. Ale odwoływanie się w widokach bezpośrednio do modelu jest mało eleganckie. wlodi, spróbuj przerobić to tak jak proponowałem kilka postów wyżej, problem powinien się rozwiązać (uwaga na kolejność ustawiania tych zmiennych, jest ważna).