前端和后端应该由不同的控制器处理吗?

2024-03-28

在我之前的学习项目中,我总是使用单个控制器,但现在我想知道这是否是好的做法,甚至总是可能的。

在所有 RESTful Rails 教程中,控制器都有一个show, an edit and an index看法。如果授权用户登录,则edit视图变得可用并且index视图显示其他数据操作控件,例如删除按钮或指向edit view.

现在我有一个 Rails 应用程序,它完全属于这种模式,但是index视图不可重复使用:

  1. 普通用户会看到一个华丽的索引页面,其中包含大量图片、复杂的布局、不需要 JavaScript,...
  2. 管理员用户索引具有完全不同的简约设计、jQuery 表和大量附加数据,...

现在我不知道如何处理这个案子。我可以想到以下几点:

  1. 单个控制器,单个视图:使用一个控制器将视图分为两个大块/部分if陈述。
  2. 单控制器,两个视图:index and index_admin.
  3. 两个不同的控制器:BookController and BookAdminController

这些解决方案似乎都不完美,但目前我倾向于使用第三个选项。

执行此操作的首选方法是什么?


几乎每次接到新项目时我都会问自己这个问题。我通常选择以下两种解决方案之一:

1).单控制器,单视图

我现在几乎从不选择这个解决方案,除非项目非常简单,并且只有一两种类型的用户。如果您有多种用户类型,最好使用解决方案#2。尽管此解决方案可能很有吸引力,因为您认为通过编写更少的代码可以节省一些时间,但最终,您的控制器和视图将变得更加复杂。更不用说您必须考虑的所有边缘情况了。这通常意味着错误。

我的公司曾经要拯救一个失败的项目,它有3种用户类型。 (管理员、业务和会员)。他们使用了解决方案#1。代码状况很糟糕(这就是我们被要求拯救这个项目的原因)我们开玩笑地说这不是 MVC,而是 MMM。 (模型-模型-模型)这是因为业务逻辑没有正确提取并放入模型中,而是散布在控制器和视图中。

2)。多个控制器,多个视图

这些天我越来越多地使用这个解决方案。我通常用用户类型命名控制器。例如:

在“应用程序/控制器”中

class BookController < ApplicationController
end

并在“应用程序/控制器/管理”中

class Admin::BookController < Admin::BaseController
end

我填写BookController时只需要考虑普通用户,填写时只需要考虑admin用户Admin::BookController

我不确定是否有更好的方法,但这是我从迄今为止所做的十几个项目中学到的......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端和后端应该由不同的控制器处理吗? 的相关文章

  • Rails 5:ActionMailer 的“deliver_later”从未在生产环境中交付

    我有一个非常基本的邮件程序设置 如下所示来发送交易邮件程序 class PayoutMailer lt ApplicationMailer default from email protected cdn cgi l email prote
  • Rails 4 - 如何安装“jquery-ui”?

    为了使用 jquery 自动完成插件 我需要安装jquery ui gem 到目前为止 我的 gemfile 中有以下内容 gem jquery rails 所以我补充道 gem jquery ui rails And to applica
  • 数据库被锁定?

    我如何修复数据库锁 因为我的测试没有通过 它使同一类别中的一堆测试失败 谢谢 1 UsersController GET edit should have a link to change the Gravatar Failure Erro
  • Rails 4/5 发送动态 ActionMailer::Base.mail 电子邮件,附件标记为 Noname

    我看过类似的帖子 主要涉及通过创建视图和控制器来发送附件 例如 电子邮件中的 PDF 附件称为 Noname https stackoverflow com questions 12816042 pdf attachment in emai
  • 就MVC模式而言,Struts 2中使用的Action是什么?

    在Struts2中 控制器将请求分派给Action Action将其传递给后端逻辑 这可以看作是一个非常大的过程 model 处理请求 JSP代表视图 Struts2中如何定义Action 肯定是not一个看法 是控制器还是模型 Strut
  • gem 如何提供 Cucumber 功能和步骤定义?

    我有两个 Rails 项目 A 和 B 其中包含以下宝石 project A gem green theme path gt dev themes green theme gem devel tasks path gt dev themes
  • 黄瓜和 Rspec

    任何人都可以向我推荐黄瓜和 rspec 教程 rails 3 的好来源 简单示例 吗 Edit 实际上我正在寻找带有很好示例的免费在线资源 我觉得R规格书 http www pragprog com titles achbd the rsp
  • 使用 sidekiq 只执行众多重复作业之一?

    我有一个后台作业 在 MongoDB 上执行映射 归约作业 当用户向文档发送更多数据时 它会启动在文档上运行的后台作业 如果用户发送多个请求 它将启动同一文档的多个后台作业 但实际上只有一个需要运行 有没有办法可以防止多个重复实例 我正在考
  • Ruby IMAP IDLE 并发 - 如何解决?

    我正在尝试构建一个 目前是私有的 Web 应用程序 该应用程序将利用 IMAP IDLE 连接在人们到达时显示电子邮件 我很难弄清楚如何将其组合在一起 以及它如何与我的 Heroku RoR 服务器结合在一起 我编写了一个用于连接到 IMA
  • has_many 关系的动态 class_name

    我正在尝试与动态 class name 属性建立 has many 关系 class Category lt ActiveRecord Base has many ads class name gt lambda return self i
  • 在 Ruby on Rails 中渲染部分集合正在乘以项目

    我想在 Ruby on Rails 的页面中显示项目列表 我使用部分 in my index html erb我有的文件 in list news html erb I have div class news div
  • Facebook 注册后重定向至页面

    我正在尝试在成功 Facebook 注册 未登录 后重定向用户 我想重定向到 getstarted welcome用户注册后首次 我的omniauth回调是 def facebook You need to implement the me
  • docker 中的 Capybara headless chrome 返回 DevToolsActivePort 文件不存在

    我正在尝试配置系统测试以使用硒中的无头铬 我有以下水豚配置 spec support capybara rb Capybara server puma Silent true RSpec configure do config config
  • Rails has_many 通过使用 source 和 source_type 为多种类型设置别名

    这是一个示例类 class Company lt ActiveRecord Base has many investments has many vc firms through investments source investor so
  • Rails 和 Mysql 的毫秒数

    使用 Rails Mysql 时存储时间 以毫秒为单位 的最佳方式是什么 我将使用小数和composed of 以便能够将该值作为Ruby 时间进行操作 有人有更好的主意吗 自从提出这个问题以来 已经过去了好几年了 这是更新的解决方案 ht
  • :confirm 在使用 Rails 3 和 jQuery UJS 时忽略 Rails 中的选项

    我的 Rails 应用程序中有一个项目表 每个项目都有一个删除链接 如下所示 但是 即使用户单击对话框上的 取消 也会发送删除请求 有想法该怎么解决这个吗 我正在使用 Rails 3 Beta 3 以及 jQuery 库和随附的 jQuer
  • Rails 应用程序中的持久 TCP 连接

    我有一个在服务器上运行的第三方应用程序 它对客户端进行身份验证并返回响应 我的问题是 对于我收到 Rails 应用程序的每个请求 我都需要建立 TCP 连接并获取数据 是否可以有一个持久连接 以便我可以减少建立连接的开销 我希望你使用的是
  • RSpec 抛出分段错误

    有时我的测试套件会无缘无故地抛出分段错误 这是输出 Users Test rvm gems ruby 1 9 3 p392 gems activerecord 3 2 9 lib active record relation query m
  • “if”在 ASP.NET MVC View (.aspx) 文件中被认为有害?

    我记得看到一个博客 或其他内容 说你不应该在 ASP NET MVC 的 aspx 文件中使用 但我不记得它说的替代方案是什么 有人记得看过这个并指出我吗 基本上 这意味着您的视图中不应该有大量的 if 语句 您的控制器和视图模型应该能够处
  • Rails - 使链接与 ajax 一起工作

    我有一个链接 应该使用 ajax 加载它旁边的部分内容 而无需重新加载页面 链接在这里 这是链接应该转到的控制器 class ProfilesController lt ApplicationController def profile f

随机推荐

  • 编写 Prolog 谓词的最佳实践是什么,以便它以指定参数的不同方式工作

    我正在尝试实现一些简单的谓词 例如 my length 或 my append 如果我们事先知道我们想要找到列表的长度 或者我们想要附加两个列表 这对我来说很容易 即我知道什么是输入 什么是输出 在 Prolog 中 可以用其他方式做事 如
  • Selenium findElements() 多次返回第一个元素的同一实例

    我需要获取所有文章标题的列表 但由于某种原因 Selenium 返回了文章 WebElement 的同一实例 3 次 网页 HTML 如下所示 div class site content clearfix div class contai
  • 如何使用 uibinder 创建带有子级的 gwt 复合组件?

    我想创建一个组件来装饰它的子组件 例如 mycomponent ui xml
  • formData.has() 不是一个函数[重复]

    这个问题在这里已经有答案了 我正在尝试执行简单的 ajax 文件上传 但收到 未捕获的类型错误 formData has 不是函数 如果我还注释掉 formData has 检查函数并将其替换为 formData append myResu
  • MS Azure Web 角色 - 如何指定 Webroot 驱动器存储大小

    我正在开发一个非常大且复杂的企业 Web 应用程序 托管在 azure 中 注意到 Web 根目录位于 E 盘 我还注意到 C 驱动器的大小为 490GB 但有趣的是 E盘上的Web根目录大小只有1GB 有什么方法可以指定您要安装的驱动器
  • 如何保护此代码免遭 SQL 注入?有点困惑

    我已经阅读了各种来源 但我不确定如何将它们实现到我的代码中 我想知道是否有人可以帮我快速完成它 一旦我在代码中被展示如何做到这一点 我想我就能学会它 这是来自我在网上找到的 AJAX 自动完成 尽管我看到它由于 queryString 或其
  • 使用php将图像保存到服务器

    嘿 我有以下脚本 基本上是一个闪存文件向它发送一些数据 它创建一个图像 然后为用户打开一个另存为对话框 以便他们可以将图像保存到系统中 问题来了 如何我还要将图像保存到我的服务器吗
  • Laravel - 多对多多态关系

    我正在努力反对 Laravel 5 7 中的多态关系定义 数据情况如下 我有一个用户模型 一个产品模型和一个销售模型 我基本上想为我的用户构建一个愿望清单 它可以包含商品和产品 并且我希望在那里有一个多态关系 因为我将不得不添加新类型的东西
  • AWS S3 中有乐观锁吗?

    我在 s3 中有一个 excel 文件 由于不同的程序读取和写入它 我需要保证每个程序都写入它们读取的版本 S3仅保证新创建对象的读后一致性 以及覆盖和删除对象的最终一致性 如果您的 Excel 文件足够小 小于 400kb 您可以将其存储
  • TYPO3 表单多复选框部分

    我尝试编辑核心文件 form Resources Private Frontend Partials Field Field html 以更改前端中的 html 输出 如果我更改该文件 它不会产生任何影响 如果我更改核心文件 form Re
  • 同时显示两个片段

    From FragmentPagerAdapter in case 0我实例化了fragment A我想显示的这个片段显示里面的两个片段frag A 视图未显示 我的 FragmentPagerAdapter 由主类调用来填充 viewpa
  • 如何使用 VS 2008 和 IE 完全禁用 JavaScript 错误

    我试图防止 VS 因 JS 错误而中断 我有以下设置 在 IE 下 Tools gt Internet Settings gt Advanced tab gt Browsing Disable script debugging Intern
  • Jquery Ajax CORS + HttpOnly Cookie

    我已经在我当前的项目中使用了 CORS 尽管我似乎无法正常工作的一件事是 cookie 现在我得到了 cookie 服务器发出它并将其发送下来 firefox 接受它 我可以在 firebug cookies 部分看到它 然而 当我对该服务
  • 如何使用 Swashbuckle.AspNetCore 将自定义泛型类型公开为 Swagger 架构中的字符串

    我有一个自定义泛型类型 大致如下所示 public struct Foo
  • Scrapy:如何在蜘蛛中使用项目以及如何将项目发送到管道?

    我是新来的scrapy我的任务很简单 对于给定的电子商务网站 抓取所有网站页面 寻找产品页面 如果 URL 指向产品页面 创建一个项目 处理项目以将其存储在数据库中 我创建了蜘蛛 但产品只是打印在一个简单的文件中 我的问题是关于项目结构 如
  • 连接两个具有交替值的数组

    连接两个具有交替值的数组的最佳方法是什么 比方说array1 is 1 3 5 7 array2 is 2 4 6 8 我想将这两个数组组合起来 结果是 1 2 3 4 5 6 7 8 In Java int a1 1 3 5 7 int
  • ajax jquery 总是运行错误

    每次我运行我的 ajax jquery 函数时 我都会收到一个错误 这适用于我所有的 ajax 调用 这是我的代码的示例 function FindContact CompanyName DivisionName FirstName Las
  • 如何使用 Python 制作时间表的图像/PDF

    我正在解决时间表安排问题 并希望以 PDF 或图像集的形式打印最终输出 我有多个部分 每个部分都有自己的时间表 我为每个部分创建了一个二维数组 该数组的大小为 5 x 5 5 天 每天有 5 个时段 数组的每个索引代表一个讲座时段 现在 这
  • printf 上的分段错误 - NASM 64 位 Linux

    我尝试使用输入四个浮点数scanf 将它们存储到堆栈中 然后使用vmovupd将它们复制到寄存器以供使用 我的问题是 当我尝试输出这 4 个数字时 程序段错误位于printf 我认为这是堆栈的问题 但我尝试多次弹出 一次多条指令 但无济于事
  • 前端和后端应该由不同的控制器处理吗?

    在我之前的学习项目中 我总是使用单个控制器 但现在我想知道这是否是好的做法 甚至总是可能的 在所有 RESTful Rails 教程中 控制器都有一个show an edit and an index看法 如果授权用户登录 则edit视图变