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 82,329+ developers who get early access to new tutorials, screencasts, articles, and more.

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