gpt4 book ai didi

ruby-on-rails - Rails - 用户和管理员的 CRUD,有多少个 Controller ?

转载 作者:行者123 更新时间:2023-12-04 06:00:16 25 4
gpt4 key购买 nike

我的模型包含费用,包括用户和项目引用。

class Expense < ActiveRecord::Base
attr_accessible :amount, :expense_date, :description, :project_id, :user_id

belongs_to :project
belongs_to :user
end

ExpensesController 处理费用的基本 CRUD 操作。

我现在需要构建同一页面的管理员版本,最好是一个新 View ,它可以包括数据的不同 View ,按用户、按项目等,还可以编辑用户无法编辑的数据。

我的问题是:构建第二个 Controller 来处理数据的管理视角,或者我是否在每个方法内部设置条件,以检测原始 View 和表单,然后将它们重定向回的条件他们属于哪里?

如果我确实构建了第二个 Controller ,我该如何正确设置 form_for 以便它知道要转到哪个 Controller ?

谢谢!

PS - 如果有人有任何关于如何正确组合 Rails 应用程序的书籍,我觉得我知道 ant 部分的各个部分,但我被困在大局实现上。我在 Michael Hartl 的指导下学习了 Rails,在此之前我是一名 PHP 开发人员。

最佳答案

恕我直言,如果安全性是您应用程序的一个大问题,那么使用管理命名空间和单独的 Controller 是确保您不会留下任何漏洞的最佳方式。它也更简单,压力更小。

我会有这样的目录结构:

/app/controllers/application_controller.rb
/app/controllers/admin_controller.rb - inherits from application_controller
/app/controllers/expenses_controller.rb - non-admin, inherits from application_controller
/app/controllers/admin/expenses_controller.rb - inherits from admin_controller

您的 View 将类似地分离/重复:

/app/views/expenses/* - non-admin expenses views
/app/views/admin/expenses/* - admin expenses views

在 application_controller 中,您将 Devise 方法放入 authenticate_user,将 CanCan 方法放入 check_authorization(如果在 Controller 操作中的某个时刻未检查授权,则会抛出异常)。在 admin_controller 中,你有更严格的过滤器来确保用户是管理员。然后,您可以获得更细粒度的特定 Controller 及其操作。

当然,每个 Controller 只需定义它真正需要的操作,您不必复制 View 。也许非管理员 expenses_controller 有 index、show、new、create,而管理员只有 edit、update 和 destroy。然后在“显示” View 中,如果用户是管理员,您仍然可以使用代码添加指向“编辑”操作的链接。

编辑 - 路线

在上面的例子中,你的 routes.rb 应该是这样的:

resources :expenses, :only => [:index, :show, :new, :create]

namespace :admin do
resources :expenses, :only => [:edit, :update, :destroy]
end

因此您仍然使用 expenses_path() 作为索引,使用 expense_path(foo) 作为展示。但是,管理页面上的表单将发布到 admin_expense_path(@expense)

关于ruby-on-rails - Rails - 用户和管理员的 CRUD,有多少个 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13555727/

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