使用link_to

时间:2015-05-03 14:25:46

标签: ruby-on-rails nested-resources

我有这条路线:

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'=

我做错了什么? 我该如何测试呢?

1 个答案:

答案 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文件,但您需要针对所需的路由优化控制器操作代码。我想它会对你有所帮助。谢谢你。