我有一个非常奇怪的问题。我在Rails应用程序中有一个手风琴菜单。我在菜单中有一组链接到相应的“帖子”。这工作正常,除了我需要链接区域可点击,而不仅仅是文本。所以我把它们换成按钮。不是火箭科学。一切都有效,除了一个奇怪的问题。当我点击按钮时,我收到了路由错误页面。它说:
No route matches [POST] "/posts/14"
对于URL中的路线:
http://localhost:3000/posts/14
现在,非常非常奇怪的是,如果我尝试重新发送URL请求...页面加载。它只在我使用按钮时停止。但是,如果我从路由错误页面重新加载页面,我会收到帖子。什么???
以下是我的下拉菜单中的一部分。第一部分“初学者”是我的新按钮布局的一个示例。除非我重新加载错误页面,否则它不起作用。第二部分“Strumming”是旧的链接布局。它的工作方式应该是:
<button class="accordion">Beginner</button>
<div class="panel">
<% if @beginner.empty? %>
<p class="sidebar_lesson"><i>No lessons available</i></p>
<% else %>
<% @beginner.each do |p| %>
<%= button_to p.title, post_path(p), class: 'sidebar_lesson' %>
<% end %>
<% end %>
</div>
<button class="accordion">Strumming</button>
<div class="panel">
<% if @strumming.empty? %>
<p class="sidebar_lesson"><i>No lessons available</i></p>
<% else %>
<% @strumming.each do |p| %>
<p class='sidebar_lesson'><%= link_to p.title, post_path(p) %></p>
<% end %>
<% end %>
</div>
以下是我的路线,其中包括我要求的路线:
new_user_session GET /users/sign_in(.:format) users/sessions#new
user_session POST /users/sign_in(.:format) users/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) users/sessions#destroy
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
user_password PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
POST /users/password(.:format) devise/passwords#create
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
user_registration PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
POST /users(.:format) devise/registrations#create
posts GET /posts(.:format) posts#index
POST /posts(.:format) posts#create
new_post GET /posts/new(.:format) posts#new
edit_post GET /posts/:id/edit(.:format) posts#edit
post GET /posts/:id(.:format) posts#show
PATCH /posts/:id(.:format) posts#update
PUT /posts/:id(.:format) posts#update
DELETE /posts/:id(.:format) posts#destroy
root GET / posts#index
有人能让我知道这里发生了什么吗?我很迷茫。
答案 0 :(得分:2)
button_to默认使用HTTP POST方法https://cardoni.net/rails-button-to-vs-link-to-url-helpers/
你想要的是让你的button_to向你的路线发出GET请求。您可以通过指定类似的方法
来完成此操作 <% @beginner.each do |p| %>
<%= button_to p.title, post_path(p), method: :get, class: 'sidebar_lesson' %>
<% end %>