Ruby on rails 4 避免单表继承的自定义路由重复
我使用简单的表继承创建了几种类型的用户(Mover和Movee)。在我的路线中,我采用了一种类似的方式,即 . 但我发现自己在基类和两个子类中重新定义了相同的自定义路由 以下是模型的外观:Ruby on rails 4 避免单表继承的自定义路由重复,ruby-on-rails-4,routes,single-table-inheritance,Ruby On Rails 4,Routes,Single Table Inheritance,我使用简单的表继承创建了几种类型的用户(Mover和Movee)。在我的路线中,我采用了一种类似的方式,即 . 但我发现自己在基类和两个子类中重新定义了相同的自定义路由 以下是模型的外观: User name email address Movee < User has_many: moves Mover < User 编辑地址操作的参数散列如下所示 { movee: { address: "some address"} type:
User
name
email
address
Movee < User
has_many: moves
Mover < User
编辑地址操作的参数散列如下所示
{
movee: { address: "some address"}
type: "movee"
}
在导航栏中,我指向一个通用的编辑用户路径:
<li><a href="<%= edit_address_user_path(current_user) %>"> Update Address</a></li>
问题:有办法避免路线重复吗?我需要子类路由,以便传入类型来解析强参数,但我还需要基类路由,以便在视图中使用通用路由帮助器编辑地址用户路径。这是我使用路由问题得到的路由:
concern :addressable do
member do
get :edit_address
patch :update_address
end
end
resources :shmoovee, path: :users, controller: :users, type: "shmoovee", concerns: :addressable
resources :shmoover, path: :users, controller: :users, type: "shmoover", concerns: :addressable
resources :users do
concerns :addressable
# other user routes
end
查看路由关注点,它可能会派上用场,或者它可以实现@kurenn真正想要实现的目标,感谢您向我指出路由关注点,我可以用它重构常见路由并减少重复。
resources :shmoovee, path: :users, controller: :users, type: "shmoovee" do
member do
get :edit_address
patch :update_address
end
end
resources :shmoover, path: :users, controller: :users, type: "shmoover" do
member do
get :edit_address
patch :update_address
end
end
resources :users do
member do
get :edit_address
patch :update_address
end
end
concern :addressable do
member do
get :edit_address
patch :update_address
end
end
resources :shmoovee, path: :users, controller: :users, type: "shmoovee", concerns: :addressable
resources :shmoover, path: :users, controller: :users, type: "shmoover", concerns: :addressable
resources :users do
concerns :addressable
# other user routes
end