Rails:这个Ajax调用出了什么问题?

时间:2013-07-07 23:53:08

标签: ruby-on-rails ajax ruby-on-rails-3

我从服务器端回溯中收到:No route matches [POST] "/tracks/genlist"

我在处理Ajax调用时执行了操作。这就是我实现它的方式:

  1. routes.rb下,我添加了行get 'tracks/genlist'
  2. 在我的家(index.html.erb)视图中,我有以下调用:

    <%= button_to('Generate Playlist', :action => 'genlist',:controller=>'tracks', :method => :get, :remote => true) %>
    
  3. 我应该可以从Track数据库中获得更新的拨打电话:

    tracks_controller.rb

    def genlist
        @tracks = Track.all
        @playlist = Track.pluck(:video_id)
    end
    
  4. 最后,提交button_to表单时必须触发的Javascript:

    genlist.js.erb

    alert(<%= raw (@playlist).to_json %>);
    
  5. 我在这里做错了什么?我已经坚持了很多,如果有人想要了解更多有关错误或更多细节的信息,请不要犹豫。

1 个答案:

答案 0 :(得分:0)

您看到AbstractController::ActionNotFound的原因是action genlist在当前控制器中不存在但存在于TracksController中。您可以在button_to链接中指定控制器,以解决此问题:

<%= button_to('Generate Playlist', :action => 'genlist', :controller => 'tracks' , :method => :get, :remote => true) %> 

在您的config/routes.rb中,请确保您拥有以下内容:

resources :tracks do 
    collection do 
        get 'genlist'
    end
end

更新:

button_to帮助器不支持任何method参数,因为人们期望使用它。 method参数被附加到生成的URI查询字符串,例如'/ tracks / genlist?method = post'并在action帮助生成的form的{​​{1}}中使用。

以下是使用button_to帮助器及其生成的内容(从输出中删除了authenticity_token隐藏字段):

button_to

虽然文档:http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-button_to表明支持<%= button_to('Generate Playlist', :action => 'genlist', :controller => 'tracks' , :method => :get, :remote => true) %> # <form method="post" class="button_to" action="/tracks/genlist?method=get&remote=true"> # <div> # <input type="submit" value="Generate Playlist"> # </div> # </form> 方法,但没有明确说明这些方法会发生什么。

因此,在这种情况下,不要使用:post, :get, :delete, :patch, and :put帮助器来处理button_to请求,请使用get帮助程序,如下所示:

link_to

将生成:

<%= link_to('Generate Playlist', :action => 'genlist', :controller => 'tracks' , :method => :get, :remote => true) %>