class CommentsController < ApplicationController
def create
@commentable= context_object()
@comment = @commentable.comments.build(params[:comment].merge(:user_id => current_user.id))
if @comment.save
respond_to do |format|
format.js
end
else
render :action => 'new'
end
end
private
def context_object
params[:constraint][:context_type].singularize.classify.constantize.find(context_id)
end
def context_id
params["#{ params[:constraint][:context_type].singularize }_id"]
end
end
Ce module de commentaires m'a bien servi, mais j'ai rencontré un problème ce matin, peut-être à cause de mon utilisation de ressources imbriquées. Essentiellement, j'ai maintenant une URL comme:Rails 3 - Aider avec un module de commentaire
/projects/3/albums/6/attachments/84
Quand je commente sur cette page, je reçois l'erreur:
ActiveRecord::RecordNotFound (Couldn't find Project without an ID):
app/controllers/comments_controller.rb:102:in `context_object'
app/controllers/comments_controller.rb:14:in `create'
Mon fichier itinéraires ressemble:
resources :projects do
resources : albums do
resources :attachments
end
end
resources :attachments do
resources :comments, :only => [:create, :update,:destroy],
:constraint => {:context_type => "conversations"}
end
Toutes les idées sur comment je peux obtenir le module de commentaire pour bien jouer avec des commentaires sur project>Album>Attachment
?
Merci pour l'entrée,
J'ai modifié votre article pour la lisibilité du code. Pourriez-vous clarifier pourquoi les commentaires sur les ressources sont-ils imbriqués sur les pièces jointes en dehors des projets> hiérarchie des albums? Avez-vous besoin de GET/pièces jointes et de commenter? Avez-vous essayé de fournir des commentaires sur les pièces jointes des projets> albums> pièces jointes? – tomeduarte
@tomeduarte merci! c'est un bon point. Donc je vais m'en débarrasser. Je suppose que cela aurait plus de sens pour les commentaires de ressource dans la ressource imbriquée (je suis encore nouveau sur les rails) ... J'ai essayé mais j'ai une erreur: "ActionView :: Template :: Error (méthode non définie' attachment_comments_path 'pour # <#: 0x103018610>): "Je vais mettre à jour ma question ci-dessus avec le nouveau chemin de ressource. que faites-vous? –
AnApprentice
ok Le débordement de pile ne me laissera pas éditer, c'est une douleur. Ici, il est collé (eck) ressources: groupes font ressources: albums font ressources: commentaires,: only => [: créer,: mise à jour,: détruire],: contrainte => {: context_type => "albums"} ressources: pièces jointes faire ressources: commentaires,: only => [: créer,: mise à jour,: détruire],: contrainte => {: context_type => "pièces jointes"} fin fin fin – AnApprentice