Rails пытается выполнить действие обновления вместо того, которое я хочу - PullRequest
0 голосов
/ 17 августа 2010

Я хочу разработать функциональность ajax для комментирования сообщений на моем сайте.

Я делал это раньше, но я не знаю, почему у меня проблемы в этот раз. Rails выполняет действие Update из posts_controller вместо действия, называемого 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 Ответ

2 голосов
/ 17 августа 2010

Вам необходимо определить метод маршрута.Также вы не определяете параметр post.

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

Следуя соглашению, вы должны указать метод route =>: post, а не: put.Положения запросов обычно используются для обновления существующих записей, публикации для создания новых.Также как насчет именованных маршрутов?

#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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...