没有路由匹配{:action =>" show",:guide_id =>#,:id => nil}缺少必需的密钥:[:id]

时间:2017-04-20 21:08:43

标签: ruby-on-rails ruby-on-rails-4 nested-routes

我知道这个问题已被问过多次,而且我也有同样的错误,但无法修复它。

如果我尝试编辑记录,我会收到以下错误:

No route matches {:action=>"show", :controller=>"guide/packages", :guide_id=>#
<GuidePackage id: 1, user_id: 3, title: "Paris to london", city: nil, 
price_per_adult: 2.44, price_per_children: 7.88, description: "XXXXXXXXXXXXX", 
created_at: "2017-04-20 20:01:58", updated_at: "2017-04-20 20:01:58">, 
:id=>nil} missing required keys: [:id]

我的新动作是:

  def new
    @guide_package = @guide.guide_packages.new
  end

我的编辑操作是:

  def edit
    @guide_package = GuidePackage.find(params[:id])
  end

我点击编辑链接的索引:

<%= link_to "Edit", edit_guide_guide_package_path(@guide, guide_package), title: "Edit" %>

我的方法是我找到指导用户:

  def set_guide
    @guide = User.friendly.find(params[:guide_id])
  end

路线是:

           guide_guide_packages GET      /guide/:guide_id/packages(.:format)                 guide/packages#index
                                POST     /guide/:guide_id/packages(.:format)                 guide/packages#create
        new_guide_guide_package GET      /guide/:guide_id/packages/new(.:format)             guide/packages#new
       edit_guide_guide_package GET      /guide/:guide_id/packages/:id/edit(.:format)        guide/packages#edit
            guide_guide_package GET      /guide/:guide_id/packages/:id(.:format)             guide/packages#show
                                PATCH    /guide/:guide_id/packages/:id(.:format)             guide/packages#update
                                PUT      /guide/:guide_id/packages/:id(.:format)             guide/packages#update
                                DELETE   /guide/:guide_id/packages/:id(.:format)             guide/packages#destroy

我的新表格和编辑:

<%= form_for [:guide, @guide_package], :multipart => true do |f| %>
<% end %>

我的所有路线都是:

  namespace :guide do
    resources :guides, :path => '/' do
      resources :packages
    end
  end

新版本可以完美地创建并创建记录,但我无法使用新表单编辑表单。

2 个答案:

答案 0 :(得分:1)

试试这个。

<%= form_for [@guide, @guide_package], :multipart => true do |f| %>
<% end %>

答案 1 :(得分:0)

我遇到过类似的问题。我的解决方案是:

<%= link_to "Edit", edit_guide_guide_package_path(:guide_id => @guide.id,  :id => guide_package.id), title: "Edit" %>

我希望它可以帮到你。