首页 > 解决方案 > 为什么设计注册编辑操作不需要参数?

问题描述

我正在学习 Rails 课程,我的路线中有这个

devise_for :users,
             path: '',
             path_names: { sign_up: 'register', sign_in: 'login', edit: 'profile', sign_out: 'logout' },
             controllers: { omniauth_callbacks: 'omniauth_callbacks', registrations: 'registrations' }

这将生成类似的路线

 edit_user_registration GET      /profile(.:format)      registrations#edit

在我看来,我只需要使用edit_user_registration_pathwhile 通常它应该是 sth like user_path(:id)。如果我写edit_user_registration_path(1)它会重定向到.../profile.1

据我所知,正常的 Rails 编辑路线应该有params[:id]. 为什么在这种情况下它不需要以及如何edit_user_registration_path(1)生成.../profile.1

标签: ruby-on-railsdevise

解决方案


路由不需要也不接受 ID 参数,因为它们作用于存储在会话中且不通过参数传递的当前用户。

同样,如果您想创建一个处理属于当前用户的项目的控制器,您可以这样做:

scope :user do
  resources :items, controller: :user_items
end

class UserItemsController
  before_action :authenticate_user
  # GET /user/items
  def index
    @items = current_user.items
  end
end

如果您改为在其中构建管理界面之类的东西,您可以在其中编辑系统上的其他用户,则需要 id 参数。


推荐阅读