I was developing a Ruby on Rails application. It has a nested route like so:
Rails.application.routes.draw do
root 'trip_plans#index'
resources :trip_plans do
resources :places, except: [:show, :index]
end
end
The trip_plans resource has a TripPlan model and the places resource has a Place model. According to the routes, the new_trip_plan_place_path is a route like /trip_plans/:trip_plan_id/places/new. The views/places/new.html.haml uses a form_for declaration to create a new place within the current trip_plan:
- content_for :title do
%title Add a Place to Your Plan
%header.form-header
.container.form-container
.row
.col-xs-12
%h1 Add a Place
%hr
%article
%section
.container.form-container
= render 'form'
The corresponding edit.html.haml is essentially the same, calling the same _form.html.haml to render the form.
The places_controller's both new and edit action is like:
def new
@trip_plan = TripPlan.find(params[:trip_plan_id])
@place = @trip_plan.places.build
end
def edit
@trip_plan = TripPlan.find(params[:trip_plan_id])
@place = @trip_plan.places.build
end
And the _form.html.haml uses the @place like so:
= form_for @place do |f|
But as @place is a dependent ActiveRecord object, Rails is not able to figure out the correct URLs for new and edit path. It always shows a new form even on edit page.
How can I fix this?
Thanks in advance!
Aucun commentaire:
Enregistrer un commentaire