J'ai une de deux classes qui peuvent avoir chacun des commentaires:Création de formulaires pour les associations polymorphes dans Rails
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
Comment puis-je créer un formulaire pour un nouveau film-commentaire? J'ai ajouté
resources :movies do
resources :comments
end
à mon routes.rb, et essayé new_movie_comment_path (@movie), mais cela me donne une forme contenant commentable_id et commentable_type [que je veux être rempli automatiquement, pas entré par l'utilisateur directement]. J'ai aussi essayé de créer moi-même la forme:
form_for [@movie, Comment.new] do |f|
f.text_field :text
f.submit
end
(où « texte » est un champ dans la table Commentaire) mais cela ne fonctionne pas non plus.
Je ne suis pas sûr de savoir comment associer un commentaire à un film. Par exemple,
c = Comment.create(:text => "This is a comment.", :commentable_id => 1, :commentable_type => "movie")
ne semble pas créer un commentaire associé au film avec id 1. (Movie.find (1) .comments retourne un tableau vide.)
Comment créer un formulaire pour entrer le commentaire? Je ne pense pas que je veux "form_for @ movie.comments.create do | f | f.texte_field: texte; f.submit end", parce que je veux seulement créer le commentaire s'il est réellement soumis. Et pour une raison quelconque, @ movie.comments.build ne semble pas associer le commentaire au film. – grautur
Vous pouvez ajouter un bouton 'Ajouter un commentaire' sur la page d'émission de film qui vous redirigera vers la page d'édition de film avec le champ Commentaires ajouté. Cela peut être fait comme suit: – Rohit
<% form_for (@movie) do | f | %> <% = f.error_messages%>
<% = f.label: Nom%>
<% f.fields_for: Les commentaires ne | v | %><% = f.text_field: Nom%>
<% = v.label: Commentaire%> <% = v.text_area: Commentaire%>
<% end %> <% end %> – Rohit