link_to 的新嵌套资源
New nested resource with link_to
我有这条路线:
resources :projects do
resources :services
resources :contacts
resources :title_abstracts
resources :parcels
resources :leases
resources :documents
end
这是在我的项目视图中向项目添加新联系人:
new_project_contact_path(@project)
产生的url是:http://localhost:3000/projects/15/contacts/new
以及联系人控制器:
def new
@project = Project.find(params[:project_id])
@contact = @project.contacts.build
end
def create
@project = Project.find(params[:project_id])
@contact = @project.contacts.build(params[:contact])
@contact.save
redirect_to project_path
end
但我收到以下错误:
Couldn't find Project with 'id'=
我做错了什么?
我该如何测试?
在您的 routes.rb 中,您将 :contacts
嵌套在 :projects
中。
但是当你使用 simple_form_for
时,你不能隐式声明 <%= simple_form_for @contact do |f| %>
。您应该将 url:{controller: :contacts, action: :create, project_id:@project.id}
作为参数与新的 @contact
实例一起传递给 simple_form_for
。这样 params[:project_id]
将在您的控制器中可用。
如果你真的想使用<%= simple_form_for @contact do |f| %>
,你需要添加
resources :contacts
到您的 routes.rb
文件,但您需要针对所需的路由优化控制器操作代码。我认为这会对 you.Thank 你有帮助。
我有这条路线:
resources :projects do
resources :services
resources :contacts
resources :title_abstracts
resources :parcels
resources :leases
resources :documents
end
这是在我的项目视图中向项目添加新联系人:
new_project_contact_path(@project)
产生的url是:http://localhost:3000/projects/15/contacts/new
以及联系人控制器:
def new
@project = Project.find(params[:project_id])
@contact = @project.contacts.build
end
def create
@project = Project.find(params[:project_id])
@contact = @project.contacts.build(params[:contact])
@contact.save
redirect_to project_path
end
但我收到以下错误:
Couldn't find Project with 'id'=
我做错了什么? 我该如何测试?
在您的 routes.rb 中,您将 :contacts
嵌套在 :projects
中。
但是当你使用 simple_form_for
时,你不能隐式声明 <%= simple_form_for @contact do |f| %>
。您应该将 url:{controller: :contacts, action: :create, project_id:@project.id}
作为参数与新的 @contact
实例一起传递给 simple_form_for
。这样 params[:project_id]
将在您的控制器中可用。
如果你真的想使用<%= simple_form_for @contact do |f| %>
,你需要添加
resources :contacts
到您的 routes.rb
文件,但您需要针对所需的路由优化控制器操作代码。我认为这会对 you.Thank 你有帮助。