Ask A Question

Notifications

You’re not receiving notifications from this thread.

undefined method `service_path' when adding best_in_place

Felix Pujols asked in Rails

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
Reply

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.

Reply

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]

Reply

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.

Reply
Join the discussion
Create an account Log in

Want to stay up-to-date with Ruby on Rails?

Join 76,990+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.

    Screencast tutorials to help you learn Ruby on Rails, Javascript, Hotwire, Turbo, Stimulus.js, PostgreSQL, MySQL, Ubuntu, and more. Icons by Icons8

    © 2023 GoRails, LLC. All rights reserved.