0

I know the question is asked number of times and I am also having same error but could'nt fix it.

I am getting below error if I try to edit my record:

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]

My new action is:

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

My edit action is:

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

The index from where I click edit link:

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

My method is which I find guide user:

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

Routes are:

           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

My form for new and edit:

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

My all routes are:

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

The new works perfectly and creates the records as well but I am unable to edit my form using new form.

  • In your edit link, what are the values of `@guide` and `guide_package`? – vich Apr 20 '17 at 21:23
  • @mmichael its `/guide/muhammad-hassan/packages/1/edit` so @guide: `muhammad-hassan` and guide_package: `1`. I am finding `muhammad-hassan` from method name: `@guide = User.friendly.find(params[:guide_id])`. Are my routes are ok? I mean nested routes for form_for? –  Apr 20 '17 at 21:25

2 Answers2

1

Try this.

<%= form_for [@guide, @guide_package], :multipart => true do |f| %>
<% end %>
Inkyu Han
  • 91
  • 5
  • it says: undefined method `user_guide_package_path' for #<#:0x007fdde89613b0> –  Apr 21 '17 at 03:36
  • Even in edit method: `@guide_package = @guide.guide_packages.new` render the new form but if i do the: `@guide_package = @guide.guide_packages.where(id: params[:id]).first` the same error comes up in edit with the error stated in question. –  Apr 21 '17 at 03:48
0

I have faced some similar issue. My solution was:

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

I hope it helps you.

F404
  • 144
  • 1
  • 12
  • Still the same error. The above stated error is coming in: `<%= form_for [:guide, @guide_package], :multipart => true do |f| %>` –  Apr 20 '17 at 22:26