2010-08-17 3 views
0

Je souhaite développer une fonctionnalité ajax pour commenter les publications de mon site Web.Rails essaie d'exécuter l'action de mise à jour au lieu de celle que je veux

Je l'ai déjà fait, mais je ne sais pas pourquoi j'ai des problèmes cette fois. Rails exécute l'action Update depuis posts_controller, au lieu de l'action appelée "save_comment".

Ceci est la ligne pertinente de mon dossier de routes:

map.connect "/posts/save_comment", :controller => 'posts', :action => 'save_comment' 

C'est le code de vue:

<%= javascript_include_tag "prototype" %> 

<% if logged_in? %> 
    <% remote_form_for :post, PostComment.new, :url => {:action => 'save_comment',:post_id=>inside_list.id}, :html => { :method => :put} do |f| %> 
    <p> 
     <%= f.label 'Comment' %><br /> 
     <%= f.text_area :comment, :style=>'height:100px;' %> 
    </p> 
    <p> 
     <%= f.submit 'Publish' %> 
    </p> 
    <% end %> 
<% end %> 

L'action save_comment ressemble à ceci:

def save_comment 
    comment = PostComment.new 
    comment.user_id = current_user.id 
    comment.post_id = params[:post_id] 
    comment.comment = params[:post][:comment] 
    comment.save 

    post = Post.find(params[:post_id]) 

    render :update do |page| 
     page.replace_html 'dComments', :partial => 'post_comments/inside_list', :object => post 
     end 
    end 

BTW: Existe-t-il un moyen plus simple de le faire?

+0

Qu'est-ce que l'apparence d'action 'save_comment' comme? –

+0

J'ai édité le poste avec cette info –

Répondre

2

Vous devez définir la méthode de routage. De plus, vous ne définissez pas le paramètre de publication.

map.connect "/posts/:post_id/save_comment", :controller => 'posts', :action => 'save_comment', :method => :post 

Après la convention, vous devriez faire la méthode route =>: post, plutôt que: put. Les demandes de mise sont généralement utilisées pour mettre à jour les enregistrements existants, publier pour en créer de nouvelles. Aussi que diriez-vous des routes nommées?

#routes.rb 
map.save_comment "/posts/:post_id/save_comment", :controller => 'posts', :action => 'save_comment', :method => :post 

#view 
<% remote_form_for :post, PostComment.new, :url => save_comment_path(inside_list.id) do |f| %> 

En outre, deviner ici, mais avez-vous cette définition:

map.resources :posts 

si vous ajoutez ensuite la nouvelle méthode

map.resources :posts, :member => {:save_comment => :post} 
+0

Cela a fait l'affaire! Je vous remercie. –

+0

¡de nada! Saludos. :) – mark

Questions connexes