0

我从我的服务器端回溯中收到: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 数据库中获得更新的 pluck 调用:

    轨道控制器.rb

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

    genlist.js.erb

    alert(<%= raw (@playlist).to_json %>);
    

我在这里做错了什么?我已经坚持了很长时间,如果有人想要更多关于错误或更多细节的信息,请不要犹豫。

4

1 回答 1

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_tohelper 不支持任何method期望使用的参数。该method参数被附加到生成的 URI 查询字符串中,例如“/tracks/genlist?method=post”,并在帮助程序生成 action的中使用。formbutton_to

以下是button_tohelper 的使用及其生成的内容(从输出中删除了authentity_token 隐藏字段):

<%= 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>

虽然文档:http ://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-button_to声明:post, :get, :delete, :patch, and :put方法受支持,但没有明确说明这些方法会发生什么。

因此,在这种情况下,不要对请求使用 helper,而是使用button_tohelper ,如下所示:getlink_to

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

这将产生:

<a data-remote="true" href="/tracks/genlist?method=get">Generate Playlist</a>
于 2013-07-08T00:11:50.933 回答