Mam kilka klas, które każdy może mieć komentarze:Tworzenie formularzy dla polimorficznych stowarzyszeń w szynach
class Movie < ActiveRecord::Base
has_many :comments, :as => :commentable
end
class Actor < ActiveRecord::Base
has_many :comments, :as => :commentable
end
class Comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true
end
Jak mogę utworzyć formularz dla nowego filmu-komentarzu? Dodałem
resources :movies do
resources :comments
end
do mojego routes.rb i spróbował new_movie_comment_path (@movie), ale to daje mi formularz zawierający commentable_id i commentable_type [który chcę być wypełniane automatycznie, nie wprowadzone przez użytkownika bezpośrednio]. Próbowałem też tworzenie postaci sobie:
form_for [@movie, Comment.new] do |f|
f.text_field :text
f.submit
end
(gdzie „text” jest to pole w tabeli komentarzu) ale to nie działa albo.
Nie wiem, jak skojarzyć komentarz z filmem. Na przykład,
c = Comment.create(:text => "This is a comment.", :commentable_id => 1, :commentable_type => "movie")
nie wydają się tworzyć komentarz związany z filmu o identyfikatorze 1. (Movie.find (1) .comments zwraca pustą tablicę.)
Jak utworzyć formularz do wpisania komentarza? Nie sądzę, żebym chciał "form_for @ movie.comments.create do | f | f.text_field: text; f.submit end", ponieważ chcę tylko utworzyć komentarz, jeśli jest rzeczywiście przesłany. I z jakiegoś powodu @ movie.comments.build nie wydaje się kojarzyć komentarza z filmem. – grautur
Możesz dodać przycisk "Dodaj komentarz" na stronie filmu, który przekieruje Cię do strony edycji filmu z dodanym do niej polem komentarzy. Można to zrobić jak poniżej: – Rohit
<% form_for (@movie) do | f | %> <% = f.error_messages%>
<% = f.label:% name>
<% f.fields_for: komentarze zrobić | v | %><% = f.text_field:% name>
<% = v.label: Komentarz%> <% = v.text_area: Komentarz%>
<% end %> <% end %> – Rohit