gpt4 book ai didi

ruby-on-rails - Rails,根据用户类型设计 : Same resource, 不同的 Controller

转载 作者:行者123 更新时间:2023-12-02 00:02:27 24 4
gpt4 key购买 nike

我有一个资源,比如说 Product ,它可以被两个不同的用户类访问:比如 CustomerAdmin .这两者之间没有继承关系。

我正在使用 Devise 进行身份验证:

# config/routes.rb

devises_for :customers
deviser_for :admins

我有这两个 Controller :
# app/controllers/customers/products_controller.rb

class Customers::ProductsController < ApplicationController


# app/controllers/admins/products_controller.rb

class Admins::ProductsController < ApplicationController

现在取决于谁登录( CustomerAdmin ),我想要 products_path指向相应的 Controller 。我想避免 customers_products_pathadmins_products_path ,好乱

所以我已经设置了我的路线
# config/routes.rb

devise_scope :admin do
resources :products, module: 'admins'
end

devise_scope :customer do
resources :products, module: 'customers'
end

这不起作用。当我以 Customer 登录时, products_path仍然指向 Admins::ProductsController#index因为它是第一个定义的。

有什么线索吗?如果没有黑客攻击,我想做的事情可能根本不可能。

更新
根据 the code ,这是不可行的。

最佳答案

事实证明,实现这一目标的最佳方法是使用路由约束:

# config/routes.rb

resources :products, module: 'customers', constraints: CustomersConstraint.new
resources :products, module: 'admins', constraints: AdminsConstraint.new


# app/helpers/customers_constraint.rb

class CustomersConstraint
def matches? request
!!request.env["warden"].user(:customer)
end
end


# app/helpers/admins_constraint.rb

class AdminsConstraint
def matches? request
!!request.env["warden"].user(:admin)
end
end

我将约束对象存储在 helper 文件夹中,因为我真的不知道放置它们的最佳位置。

感谢 @crackofdusk小费。

关于ruby-on-rails - Rails,根据用户类型设计 : Same resource, 不同的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20492370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com