我正在学习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
?
答案 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参数。