2010-10-22 17 views
0

Je regarde un screencast de Ryan Bates sur les relations polymorphes, et il utilise cette méthode privée pour trouver tous les commentaires liés à un modèle imbriqué.Augmentation de la méthode `find_commentable` de Bates

Je pouvais trouver tous les commentaires d'un donné après avec ceci:

def find_commentable 
    params.each do |name, value| 
    if name =~ /(.+)_id$/ 
     return $1.classify.constantize.find(value) 
    end 
    end 
    nil 
end 

Et puis utilisé par:

@commentable = find_commentable 
@comments = @commentable.comments 

Les commentaires sont publiés avec ce formulaire:

- form_for [@commentable, Comment.new] do |f| 
    = f.label :text, 'Comment' 
    %br/ 
    = f.text_area :text, :style => "height: 100px;" 
    %br/ 
    = f.submit "Submit" 

Mais si sur la même page, je voudrais avoir un formulaire pour chaque commentaire? Comment pourrais-je mettre en place un formulaire_for pour cela, et qu'est-ce que son contrôleur doit spécifier?

Répondre

-1

Ce que j'ai été commencé avec la méthode find_commentable et divisé ainsi:

def find_commentable 
    params.each do |name, value| 
    if params[:comment] 
     return Comment.find(params[:comment][:id]) 
    elsif name =~ /(.+)_id$/ 
     return $1.classify.constantize.find(value) 
    end 
    end 
    nil 
end 

Et l'ID est passé comme un hidden_field de la forme. À partir de là, le contrôleur régulier prendra en charge la sauvegarde.