0

就像标题一样,我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最后一个申请页面,是我需要的,意思是形式,让它更奇怪)

编辑耙子路线

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 
4

2 回答 2

0

changing simple_form form into this worked for me:

= simple_form_for @page, url: @page.new_record? ? pages_path(params[:menu]) : page_path(params[:menu], @page)
于 2013-08-30T12:08:38.347 回答
0

检查终端窗口中的服务器日志 - 在您的编辑视图中,您可能有一个指向显示页面的无效链接。

编辑:哦,我明白了,这是一个路由问题。因为您的路由(:menu以及:id)中有一个额外的变量,所以您需要在定义表单时提供该额外的变量。

尝试以下操作(如果菜单应该等于“论坛”)

= simple_form_for :forum, @page do |f|

(其余的保持不变)

于 2013-08-30T11:22:47.090 回答