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 你有帮助。