Ruby on rails 这条路线的路线是什么?
在Ruby on rails 这条路线的路线是什么?,ruby-on-rails,Ruby On Rails,在链接到中引用此路径的干法是什么 作为旁注,我使用'users/:id/edit'编辑姓名/位置/年龄等,我使用上面的路径编辑密码和电子邮件,因为我希望在编辑这些更敏感的属性之前,强制用户对其的:current\u密码进行身份验证。我提到这一点只是为了确保我的路由逻辑是正确的 只需运行rake routes,您就会在应用程序中看到所有的路由。它应该在最右边将其更改为: get 'users/:id/edit/settings' => 'users#account' 然后,您可以将其引用为
链接到中引用此路径的干法是什么
作为旁注,我使用'users/:id/edit'
编辑姓名/位置/年龄等,我使用上面的路径编辑密码和电子邮件,因为我希望在编辑这些更敏感的属性之前,强制用户对其的:current\u密码进行身份验证。我提到这一点只是为了确保我的路由逻辑是正确的 只需运行rake routes
,您就会在应用程序中看到所有的路由。它应该在最右边将其更改为:
get 'users/:id/edit/settings' => 'users#account'
然后,您可以将其引用为:
get 'users/:id/edit/settings' => 'users#account', as: :edit_user_settings
rake routes
可能会为您提供一个类似于users\u path
的路径,您可以使用类似
您可以使用as:
选项设置命名路由
但是,我会将其设置为传统的铁路路线:
link_to edit_user_settings_path(@user)
这将创建一个习惯上正确的RESTful路由
使用单数资源
创建没有id参数的路由。此外,您应该仅对路由中最右边的动态段使用名称:id
,以避免违反最小意外原则
rake路由
将向您显示以下路由:
Rails.application.routes.draw do
resources :users do
resource :settings, only: [:edit, :update], module: :users
end
end
作为旁注,我使用“users/:id/edit”编辑姓名/位置/年龄等
我使用上面的路径编辑密码和电子邮件,因为我
希望在之前强制用户验证其:当前\u密码
编辑这些更敏感的属性。我提到这一点只是为了使
确保我的路由逻辑是正确的
您的路线将不会强制执行此授权问题
相反,您应该在控制器中执行检查:
Prefix Verb URI Pattern Controller#Action
edit_user_settings GET /users/:user_id/settings/edit(.:format) users/settings#edit
user_settings PATCH /users/:user_id/settings(.:format) users/settings#update
PUT /users/:user_id/settings(.:format) users/settings#update
...
您的路线不会强制执行此授权问题。
是的,我知道。我的意思是你在回答的前半部分提到的惯用正确路线。干杯
# app/models/users/settings_controller.rb
class Users::SettingsController
before_action :set_user
before_action :check_password, except: [:edit]
def edit
# ...
end
def update
# ...
end
private
def set_user
@user = User.find(params[:user_id])
end
def check_password
# this is an example using ActiveModel::SecurePassword
unless @user.authorize(params[:current_password])
@user.errors.add(:current_password, 'must be correct.')
end
end
end