就像在标题中一样,我在控制器中进入edit
动作时遇到了奇怪的问题。当我试图得到,错误是
ActionController::UrlGenerationError at /pages/header/foo/edit
No route matches {:action=>"show", :controller=>"pages", :menu=>#<Page id: 1, title: "tytul", slug: "foo", name: "kupa", position: 1, created_at: "2013-08-27 12:46:26", updated_at: "2013-08-30 07:57:58", menu: "header">, :id=>nil, :format=>nil} missing required keys: [:id]
我认为它可能与使用路径定义资源的routes.rb
文件相关联:
resources :pages, path: "pages/:menu"
所以,当我输入例如www.example.dev/pages/forum/interesting_topic
时,我得到了正确的回复,行动show
与@page = interesting_topic (and :menu = "forum")
。
但另一方面www.example.dev/pages/forum/interesting_topic/edit
让我想到上面的错误。这真的很奇怪,因为我的参数看起来像这样:
{"action"=>"edit", "controller"=>"pages", "menu"=>"forum", "id"=>"interesting_topic"}
如果我有正确的行动edit
,并且仍然会收到有关行动show
的错误?
(也许值得一提的是better-errors
最后一个申请页面,是我需要的,意思是形式,让它变得更加奇怪)
EDIT 耙路线
sort_pages GET /pages/:menu/sort(.:format) pages#sort
save_order_pages POST /pages/:menu/save_order(.:format) pages#save_order
pages GET /pages/:menu(.:format) pages#index
POST /pages/:menu(.:format) pages#create
new_page GET /pages/:menu/new(.:format) pages#new
edit_page GET /pages/:menu/:id/edit(.:format) pages#edit
page GET /pages/:menu/:id(.:format) pages#show
PATCH /pages/:menu/:id(.:format) pages#update
PUT /pages/:menu/:id(.:format) pages#update
DELETE /pages/:menu/:id(.:format) pages#destroy
第二。修改
因为我删除了“编辑”视图部分呈现的所有内容,它突然开始工作,我在这里给出了编辑操作
= simple_form_for @page do |f|
.inputs
= f.input :title
= f.input :slug
= f.input :name
.actions
=f.button :submit
和控制器
before_filter :set_page, only: [:edit, :update, :destroy]
def edit
end
private
def set_page
@page = Page.find_by_slug!(params[:id])
end
答案 0 :(得分:0)
检查终端窗口中的服务器日志 - 您可能在编辑视图中显示指向展示页面的链接无效。
编辑:哦,我知道,这是一个路由问题。由于路由中有一个额外的变量(:menu
以及:id
),因此在定义表单时需要提供额外的变量。
尝试以下方法(如果菜单应该等于'论坛')
= simple_form_for :forum, @page do |f|
(其余部分保持不变)
答案 1 :(得分:0)
将simple_form表单更改为此对我有用:
= simple_form_for @page, url: @page.new_record? ? pages_path(params[:menu]) : page_path(params[:menu], @page)