我有这条路线:
resources :projects do
resources :services
resources :contacts
resources :title_abstracts
resources :parcels
resources :leases
resources :documents
end
这是在我的项目视图中向项目添加新联系人:
new_project_contact_path(@project)
生成的网址是: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'=
我做错了什么? 我该如何测试呢?
答案 0 :(得分:0)
在您的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
文件,但您需要针对所需的路由优化控制器操作代码。我想它会对你有所帮助。谢谢你。