这是我对stackoverflow的第一个问题,我觉得有点愚蠢,因为我自己无法解决这个问题,但是这里有。
我正在尝试将网页索引上的链接连接到编辑操作,我收到以下错误:
No route matches {:action=>"edit", :controller=>"pages"}
所以显然我首先检查了控制器 - 那里肯定有一个编辑动作!
这是我相关的佣金路线输出:
pages GET /pages(.:format) pages#index
POST /pages(.:format) pages#create
new_page GET /pages/new(.:format) pages#new
edit_page GET /pages/:id/edit(.:format) pages#edit
page GET /pages/:id(.:format) pages#show
PUT /pages/:id(.:format) pages#update
DELETE /pages/:id(.:format) pages#destroy
我的config / routes.rb:
Portfolio::Application.routes.draw do
resources :pages
resources :sessions, only: [:new, :create, :destroy]
resources :users
root to: 'pages#home'
match '/signup', to: 'users#new'
match '/signin', to: 'sessions#new'
match '/signout', to: 'sessions#destroy', via: :delete
match '/admin', to: 'admin#index'
match '/new', to: 'pages#new'
match '/edit', to: 'pages#edit'
match '*path', :controller => 'redirect', :action => 'index'
控制器动作,以防万一。
def edit
@page = Page.find(params[:id])
end
我以为我也会给视图提供路径:
<% Page.where("parent_id IS NULL").each do |page| %>
<li>
<%= link_to page.title, page %>
<%= link_to "Edit", page, edit_page_path %>
<%= link_to "Delete", page, method: :delete,
data: { confirm: "You sure?" } %>
</li>
<% end %>
我确实有一个不会看到我的错别字的可怕习惯,所以如果我做了一个愚蠢的,它会解释为什么我无法修复这个。
任何帮助都将不胜感激。
谢谢!
答案 0 :(得分:1)
尝试:
<%= link_to "Edit", edit_page_path(page) %>
如果仔细观察路线输出:
edit_page GET /pages/:id/edit(.:format) pages#edit
路线edit_page要求:id传递给。
答案 1 :(得分:0)
编辑链接应该像这样生成
<%= link_to "Edit", edit_page_path(page) %>
正如埃雷兹指出的那样,:id
是必需的,page
是从url
检索的。
检查link_to签名,了解传递参数的可能方法。第一个/第二个参数适用于url_options
或html_options
,而第三个参数适用于{{1}}。