我想开发一个用于评论我网站帖子的ajax功能。
我以前做过这个,但我不知道为什么这次我遇到了问题。 Rails从posts_controller执行Update操作,而不是名为“save_comment”的操作。
这是我的路线档案的相关行:
map.connect "/posts/save_comment", :controller => 'posts', :action => 'save_comment'
这是视图的代码:
<%= 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 %>
save_comment操作如下所示:
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
顺便说一下:有没有更简洁的方法呢?
答案 0 :(得分:2)
您需要定义路线方法。你也没有定义post参数。
map.connect "/posts/:post_id/save_comment", :controller => 'posts', :action => 'save_comment', :method => :post
遵循惯例,您应该制作路线方法=&gt; :post,而不是:put。 Put请求通常用于更新现有记录,post用于创建新记录。命名路线怎么样?
#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| %>
另外,在这里猜测,但你有这个定义:
map.resources :posts
如果你这样做,那么添加新方法
map.resources :posts, :member => {:save_comment => :post}