我从服务器端回溯中收到:No route matches [POST] "/tracks/genlist"
我在处理Ajax调用时执行了操作。这就是我实现它的方式:
routes.rb
下,我添加了行get 'tracks/genlist'
在我的家(index.html.erb)视图中,我有以下调用:
<%= button_to('Generate Playlist', :action => 'genlist',:controller=>'tracks', :method => :get, :remote => true) %>
我应该可以从Track数据库中获得更新的拨打电话:
tracks_controller.rb
def genlist
@tracks = Track.all
@playlist = Track.pluck(:video_id)
end
最后,提交button_to表单时必须触发的Javascript:
genlist.js.erb
alert(<%= raw (@playlist).to_json %>);
我在这里做错了什么?我已经坚持了很多,如果有人想要了解更多有关错误或更多细节的信息,请不要犹豫。
答案 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) %>