具有 has_one 关联的 Ruby on Rails 嵌套路由

Mat*_*ski 6 ruby routes ruby-on-rails ruby-on-rails-4

我有两个模型:

预订:

class Reservation < ActiveRecord::Base
  has_one :car_emission
end
Run Code Online (Sandbox Code Playgroud)

汽车排放:

class CarEmission < ActiveRecord::Base
  belongs_to :reservation
end
Run Code Online (Sandbox Code Playgroud)

以及以下路线:

resources :reservations do 
  resources :car_emissions
end
Run Code Online (Sandbox Code Playgroud)

现在,当我想创建新的 car_emission 时,我必须像这样访问 url:

http://localhost:3000/reservations/1/car_emissions/new
Run Code Online (Sandbox Code Playgroud)

当我想编辑时,我必须访问:

http://localhost:3000/reservations/1/car_emissions/1/edit
Run Code Online (Sandbox Code Playgroud)

无论如何要更改我的 car_emission 编辑链接将如下所示的路线:

http://localhost:3000/reservations/1/car_emission
Run Code Online (Sandbox Code Playgroud)

Ric*_*eck 9

你想做几件事:

1. Create singular resource
2. Change the `edit` path for your controller
Run Code Online (Sandbox Code Playgroud)

单一资源

正如 所建议的那样@sreekanthGS,您首先最好创建一个单一的资源。这与方法的工作方式相同resources,只是它将您的路线视为单个记录;取消index路线等:

#config/routes.rb
resources :reservations do
    resource :car_emission # -> localhost:3000/reservations/1/car_emission
end
Run Code Online (Sandbox Code Playgroud)

编辑

这将为您创建一组 RESTful 路由,但当您点击“裸”链接时car_emission,它仍会带您进入car_emissions#show操作

你最好这样做:

#config/routes.rb
resources :reservations do
    resource :car_emission, except: :show, path_names: { edit: "" }
end
Run Code Online (Sandbox Code Playgroud)

edit当您点击“裸”链接时,这将带您进入操作