我正在开发Ruby on Rails应用程序。它有一个嵌套的路由,如:
Rails.application.routes.draw do
root 'trip_plans#index'
resources :trip_plans do
resources :places, except: [:show, :index]
end
end
trip_plans
资源具有TripPlan
模型,places
资源具有Place
模型。根据路线,new_trip_plan_place_path
是/trip_plans/:trip_plan_id/places/new
之类的路线。 views/places/new.html.haml
使用form_for
声明在当前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'
相应的edit.html.haml
基本相同,调用相同的_form.html.haml
来呈现表单。
places_controller
new
和edit
行为就像:
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
而_form.html.haml
使用@place
就像这样:
= form_for @place do |f|
但由于@place
是依赖的ActiveRecord对象,因此Rails无法确定new
和edit
路径的正确网址。它始终在edit
页面上显示新表单。
我该如何解决这个问题?
提前致谢!
答案 0 :(得分:1)
即使在编辑页面上也始终显示新表格
我想问题是@place = @trip_plan.places.build
方法中的这一行edit
。
@place = @trip_plan.places.build
只是@place = @trip_plan.places.new
,因此 Rails 会将@place
视为 新实例< / em> 即使在 编辑表单 。
将其更改为@place = Place.find(params[:id])
可以解决您的问题。
<强> 更新 强>
您还应该更改以下内容
= form_for @place do |f|
到
= form_for [@trip_plan, @place] do |f|