Как мне выполнить другое действие, кроме CRUD, с помощью ajax в Rails?

#jquery #ruby-on-rails #ajax

#jquery #ruby-on-rails #ajax

Вопрос:

Итак, я новичок в Ajax в RoR и у меня первая проблема с выполнением файла .js.erb после завершения какого-либо действия. Под «некоторым действием» я подразумеваю не сгенерированное Rails по умолчанию, потому что они, похоже, работают нормально.

Вот что я получил:

  • index.html.erb:

     <%= form_tag(:action => 'add_comment', :remote => true) do |c| %>
        Name:
        <%= text_field :comment, :name %>
        <br/>
        Comment: 
        <br/>
        <%= text_area :comment, :text, :cols => 30, :rows => 10 %>
        <br/><br/>
        <%= submit_tag 'Add comment' %>
    <% end %>
      
  • действие add_comment в comments_controller.rb:

     def add_comment
            @comment = Comment.new(params[:comment])
            @comment.save
    
            respond_to do |format|
                    format.html { redirect_to comments_path }
                    format.js
            end
    end
      
  • routes.rb:

     match 'comments/add_comment' => 'comments#add_comment'
      

И все же комментарий добавляется при обновлении страницы — add_comment.js.erb не выполняется (при переименовании обоих действий add_comment и add_comment.js.erb в «create» работает).

Что я делаю не так?

Ответ №1:

 <%= form_tag add_comment_path, :remote => true do %>
  ...
<% end %>
  

В ваших маршрутах:

 resources :comments do
  post :add, :on => :collection
end
  

Комментарии:

1. Спасибо, наконец-то работает. Я пробовал этот маршрут, но, похоже, я не понимаю разницы между «add_comment_comments_path» и «:action => ‘add_comment’ (: controller => ‘comments’)» в аргументах form_tag, и это было причиной моих проблем — не могли бы вы объяснить?