ruby-on-rails - 为什么设计注册编辑操作不需要参数?
问题描述
我正在学习 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
while 通常它应该是 sth like user_path(:id)
。如果我写edit_user_registration_path(1)
它会重定向到.../profile.1
据我所知,正常的 Rails 编辑路线应该有params[:id]
. 为什么在这种情况下它不需要以及如何edit_user_registration_path(1)
生成.../profile.1
?
解决方案
路由不需要也不接受 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 参数。
推荐阅读
- java-8 - 在 Mac OS 上访问 Azure CosmosDB 模拟器数据资源管理器
- typescript - 基于属性的打字稿方法返回类型
- javascript - 在 html 文档中滚动一点
- python - 试图在python中操作条形图的数据以获得测试成绩
- angular - 角度、css 转换和转换后更改类
- c# - 如何将代码绑定到 Avalonia TextBox 的 TextInput 事件?
- c++ - 带有命名管道的 boost::asio;父进程无法通过 async_read_some 从管道中读取
- sql - 如果同一剪辑存在相同的日期,则提出能够添加时间间隔的逻辑#
- qt - 从非主线程引导 QT Gui
- android - 检测应用后台活动是否受到限制