Skip to main content

undefined method `service_path' when adding best_in_place

Rails • Asked by Felix Pujols

I have an application that has customers and services. Customers has_many services and service belongs_to customer. In the customer show page, I can add or delete services. But I can not edit services, so I'm using best_in_place to do that. but is not working. It returns undefined method `service_path'. I will appreciate any help, I'm new in software.

here is the repository link if you want to check the whole app.

https://github.com/felixpro/ars-reclama/commits/master

I restarted the server, but it keeps returning the same error.

customer/show.html.erb

   <% @customer.service.each do |service| %>
      <%= best_in_place service, :process  %>
   <% end %>

customer_controller.rb

def show
    @customer = Customer.find params[:id]
    @service = @customer.service.order('created_at DESC').limit(4)
  end


  def edit
    @customer = Customer.find params[:id]
  end

service_controller.rb

  def edit
    @customer = Customer.find params[:id]

    @service = @customer.services.find(params[:id])
  end


  def update
    @service = Service.find(params[:id])

    respond_to do |format|
      if @service.update(service_params)
        format.html { redirect_to @service, notice: 'Service was successfully updated.' }
        format.json { render :show, status: :ok, location: @service }
      else
        format.html { render :edit }
        format.json { render json: @service.errors, status: :unprocessable_entity }
      end
    end
  end

routes.rb

resources :customers do
    resources :services
  end

Based on your routes.rb, your path should be customer_service_path() as it's nested. Check in your cli/terminal rails routes to see all the routes available to you.

I don't know best_in_place, but I reckon you can change the path to "post/put" to.


Thank you, but still not working.

I did that:

<td><%= best_in_place customer_service_path(), :process %></td>

an it's giving me an error:

No route matches {:action=>"show", :controller=>"services", :id=>"2"}, missing required keys: [:customer_id]


The error says it all :)
missing required keys: [:customer_id] You need to add both your customer_id and service.id in there too, otherwise does not know which customer or service object to update. Note: that this not specfic for the best_in_place plugin, but is general Rails stuff.


Login or Create An Account to join the conversation.

Subscribe to the newsletter

Join 24,647+ developers who get early access to new screencasts, articles, guides, updates, and more.

    By clicking this button, you agree to the GoRails Terms of Service and Privacy Policy.

    More of a social being? We're also on Twitter and YouTube.