为什么“ Devise注册”编辑操作不需要参数?

时间:2019-07-15 21:58:17

标签: ruby-on-rails devise

我正在学习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_path,而通常它应该像user_path(:id)一样。如果我写edit_user_registration_path(1),它将重定向到.../profile.1

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

1 个答案:

答案 0 :(得分:2)

路由不需要也不需要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参数。