我有两种模式:
预留:
class Reservation < ActiveRecord::Base
has_one :car_emission
end
CarEmission:
class CarEmission < ActiveRecord::Base
belongs_to :reservation
end
以及以下路线:
resources :reservations do
resources :car_emissions
end
现在,当我想要创建新的car_emission时,我必须访问这样的URL:
http://localhost:3000/reservations/1/car_emissions/new
当我想编辑时,我必须访问:
http://localhost:3000/reservations/1/car_emissions/1/edit
无论如何要改变我的car_emission编辑链接的路线如下:
http://localhost:3000/reservations/1/car_emission
答案 0 :(得分:4)
你想做几件事:
1. Create singular resource
2. Change the `edit` path for your controller
根据@sreekanthGS
的建议,您首先要创建一个独特的资源。这与resources
方法的工作方式相同,只是它将您的路线视为单个记录;取消index
路线等:
#config/routes.rb
resources :reservations do
resource :car_emission # -> localhost:3000/reservations/1/car_emission
end
修改强>
这将为您的car_emission
创建一组RESTful路由,但当您点击“裸”链接时,它仍会转到car_emissions#show
行为
你最好这样做:
#config/routes.rb
resources :reservations do
resource :car_emission, except: :show, path_names: { edit: "" }
end
当您点击“裸露”链接
时,会转到edit
行动
答案 1 :(得分:2)
尝试:
resources :reservations do
resource :car_emissions
end
有一种叫做奇异资源的东西:
http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default
<强> 引用: 强>
部分: 2.5奇异资源
有时,您拥有一个客户端始终查找而不引用ID的资源。例如,您希望/ profile始终显示当前登录用户的配置文件。在这种情况下,您可以使用单一资源将show / profile(而不是/ profile /:id)映射到show动作:
get 'profile', to: 'users#show'
传递一个String来获取将需要一个控制器#动作格式,而传递一个符号将直接映射到一个动作:
get 'profile', to: :show
这条资源丰富的路线:
resource :geocoder
在您的应用程序中创建六个不同的路径,所有路径都映射到Geocoders控制器。
答案 2 :(得分:1)
shallow: true
可能就是您想要的
resources :reservations, shallow: true do
resources :car_emissions
end
shallow: true
会在index
内嵌入create
new
,:car_emissions
和:reservations
次行动。 update
动作不会嵌套在里面。
这将为您提供如下所示的路线:
GET /reservations/:reservation_id/car_emissions(.:format) caremissions#index
POST /reservations/:reservation_id/car_emissions(.:format) caremissions#create
GET /reservations/:reservation_id/car_emission/new(.:format) caremissions#new
GET /reservations/:id/edit(.:format) reservations#edit
PATCH /reservations/:id(.:format) reservations#update
PUT /reservations/:id(.:format) reservations#update
DELETE /reservations/:id(.:format) reservations#destroy
GET /reservations/:id(.:format) reservations#show
答案 3 :(得分:1)
此类型的链接
http://localhost:3000/reservations/1/car_emission
用于显示宁静资源的汽车排放量,因此使用它进行简单编辑就像上面使用的那样可能会与宁静的资源冲突。
您可以选择制作单独的奇异资源,并将其指向您想要的路线。