Rails尝试执行Update操作而不是我想要的操作

时间:2010-08-17 19:21:09

标签: ruby-on-rails

我想开发一个用于评论我网站帖子的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
顺便说一下:有没有更简洁的方法呢?

1 个答案:

答案 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}