Rails - 从我的观点中移出计算?

2024-01-11

目前我正在按照我的观点进行一些计算,这当然是一件坏事:

<% categories.each do |c| %>
  ....
    <%= c.transactions.sum("amount_cents") %>
  ....
<% end %>

我正在研究可以帮助我重构上述问题的方法。

一件事是将计算移至我的控制器

@category_sum = @transaction.sum("amount_cents")

这可能是更好的解决方案,但你知道。不完美。

由于我有很多用户,我不知道如何将计算器逻辑移动到我的模型中。所以我想我可能需要使用一个新的类,创建一堆方法(总和,平均值等)并在视图中使用它们?我走在正确的轨道上吗?对于有关如何重组我的代码以及设计和实现此类的任何建议,我将不胜感激。


隔离视图逻辑的一种方法是使用演示者。

演示者允许您执行类似的操作:

<% categories.each do |c| %>
  ....
    <% present c do |category| %>
    <%= category.transaction_sum %>
    <% end %>
  ....
<% end %>

然后你有一个演讲者课程app/presenters/category_presenter.rb :

class CategoryPresenter < BasePresenter
  presents :category

  def transaction_sum
    category.transactions.sum("amount_cents")
  end
end

当然,如果演示器中有很多方法,那么最好使用它(但是一旦开始减少视图逻辑,演示器很快就会被填满)。

这里使用的实现依赖于中描述的内容这个专业 Railscast http://railscasts.com/episodes/287-presenters-from-scratch?view=comments。基本思想是简单地有一个#present根据对象类推断类名的帮助器,加载并初始化正确的演示者类。

另一种流行的替代方法是使用drapper https://github.com/drapergem/draper,它使用装饰器的概念,但演示者基本上是一个装饰器。

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

Rails - 从我的观点中移出计算? 的相关文章

  • 为什么 Rails 中的区域设置充当全局(使用 Thin 时)?

    我刚刚意识到在控制器中设置区域设置的推荐 Rails 方法 before filter set locale def set locale I18n locale params locale I18n default locale end
  • Rails 从 OrdersController 更新用户模型的属性

    这是我的代码 订单控制器类 def create order Order new params order if order purchase work GATEWAY store credit card options result wo
  • 无法使用 Rails 6 Actiontext 渲染 youtube 嵌入 iframe

    我已经设置了一个自定义嵌入模型 这样我就可以将 Instagram 或 YouTube 嵌入等内容添加到我网站上的 ActionText 内容中 它适用于 Instagram 嵌入 但不适用于 YouTube 作为参考 我要显示的 yout
  • puma systemd 脚本无法启动 puma

    我已经从多个来源复制并粘贴了以下美洲狮系统启动脚本的片段 但它不起作用 系统是Debian 9 6 用户rails红宝石通过安装rvm 用户rails可以启动命令RAILS ENV production bundle exec puma C
  • 在 mac os Sierra 上,卡在“设置 CocoaPods 主存储库”上

    转移到 mac os sierra 后 我完全格式化了我的 mac 现在每次运行时我都面临安装 cocoapods 的问题sudo gem install cocoapods pre一切都安装得很好 当我尝试安装 Pod 时 终端堆栈打开S
  • 用于验证目的的动态查找方法

    我正在使用 Ruby on Rails 3 0 7 我想在运行时查找一些记录以进行验证 但为该查找方法传递 设置一个值 也就是说 在我的班级中 我有以下内容 class Group lt lt ActiveRecord Base valid
  • rspec 中的模拟方法链

    有一系列方法可以获得user目的 我试图模拟以下内容以返回user in my Factory Girl current user AuthorizeApiRequest call request headers result 我可以模拟该
  • Ruby on Rails 离线编程

    我将离开互联网几周 但仍然想完成一个项目 我应该采取哪些步骤来确保在断开连接时能够访问我需要的内容 ruby 和 ROR 离线时 以下内容很难获得 gems docs Rails 专家博客 堆栈溢出 so gem 安装尽可能多 下载所有的轨
  • Ruby on Rails Webpacker 找不到 asset_pack_path 下的图像

    我在使用 Ruby on Rails Webpacker 在视图中包含图像时遇到问题 当我尝试使用 html img 标签和 asset pack path 在我的视图中插入图像时 出现错误 我的图像位于app javascript ima
  • 如何使用 Rails 4 和 Ruby 2.0 应用程序进行实时重新加载?

    如果我在 Rails 4 Ruby 2 0 项目的文本编辑器中编辑 scss 或 erb 文件 我希望在浏览器中看到实时更改 我尝试了 Guard 和 Guard live reload 但它抛出以下错误 22 58 04 ERROR Co
  • ruby 管道、IO 和 stderr 重定向

    我希望有一个 ruby 程序 一个 rake 任务 观察另一个 rake 任务的输出 输出写入器输出到 stderr 我想读一下这些行 我很难设置它 如果我有一个作家 stdout writer rb 不断打印一些东西 usr bin en
  • 如何在 Ruby 中创建自定义排序方法

    我想指定一个自定义块方法 通过评估两个属性来对对象数组进行排序 然而 经过多次搜索 我没有找到任何没有的例子 lt gt 操作员 我想比较a to b if a x less than b x return 1 if a x greater
  • 为什么我需要 Nginx 和 Puma?

    我正在将 Rails 应用程序部署到生产环境中 看起来 Puma 速度很快 可以处理我想要在网络服务器中完成的许多事情 我想知道我是否需要使用 Nginx 如果只使用 Puma 我会错过什么 Nginx 是一个 Web 服务器 puma 是
  • Rails Active Storage - 保留现有文件/上传吗?

    我有一个 Rails 模型 has many attached files 默认情况下 通过 Active Storage 上传时 如果您上传新文件 它会删除所有现有上传内容并将其替换为新文件 我有一个控制器破解 由于多种原因 它不太理想
  • 有没有办法避免自动更新 Rails 时间戳字段?

    如果您有数据库列created at and updated at当您创建和更新模型对象时 Rails 将自动设置这些值 有没有办法在不接触这些列的情况下保存模型 我正在引入一些旧数据 我想根据 不同名称的 旧数据字段中的相应值设置这些值
  • Rails 3 best_in_place 编辑在不刷新页面的情况下无法工作

    我从Bernat的博客rails迷你教程中获取了评论代码 我尝试使用他的 best in place gem 添加就地编辑功能 在大多数情况下它工作正常 我的代码部署在http falling spring 3964 herokuapp c
  • 如果使用 jQuery 添加字段,Rails 嵌套表单属性不会保存

    我有一个带有嵌套表单的 Rails 表单 我使用 Ryan Bates 嵌套表单和 jquery 教程 并且就动态添加新字段而言 它工作得很好 但是当我提交表单时 它不会保存任何关联的属性 但是 如果在表单加载时构建部分 则它会很好地创建属
  • 为什么 Rails 应用程序在底部显示数据库信息?

    我创建了一个博客 每当我添加帖子时 帖子索引页面底部总会显示数据库中的记录列表 home html erb 像这样
  • 黄瓜与 RSpec

    我想开始深入研究 BDD 我以前从未使用过 TDD 现在 不确定我是否应该从学习 RSpec 开始 然后跳到 Cucumber 或者直接使用 Cucumber 我一直在互联网上阅读有关两者的内容 在我看来 Cucumber 可能是 RSpe
  • 保护 REST 和 JSON

    我想利用 RESTful 架构构建提供 JSON 数据的 Web 服务 但我只想要我自己的客户端应用程序可以从我的网络服务请求 基本上 我的 Web 服务包含不供公众使用的敏感数据 但我想以这种方式构建它 以便我可以构建连接到我的 Web

随机推荐

  • 如何从 PhoneGapcamera.getPicture 获取 File 对象?

    这可能很简单 并且由 PhoneGap 的 相机 插件 文件 插件或 文件传输 插件中的某些功能组合涵盖 我了解用户可以选择一个文件 navigator camera getPicture function fileURI need hel
  • 使用 CONTAINS 的 SharePoint 列表 CAML 查询

    我尝试在 Web 部件中使用以下 CAML 查询来查询 SharePoint 列表 我已经在 U2U CAML 查询生成器和 Stramit CAML 查看器中测试了该查询 它工作正常 仅返回匹配的记录 但是当我在 Web 部件中使用它时
  • 如何让站点地图生成器完全抓取 SPA 的 Angular 路由器?

    我正在尝试为我的网页生成站点地图 在线站点地图生成器仅向我显示 xml 文件上的主页
  • Yesod/持久的 MongoDB 示例

    Haskell 和 Yesod 是新手 我一直在尝试遵循 Yesod 书 http www yesodweb com book persistent 中持久性章节中的与 Yesod 集成示例 Sqlite 编译并运行得很好 但是 我正在尝试
  • Safari 无法下载存折文件 .pkpass

    我在网页上有一个链接 用户可以通过该链接下载存折文件 但是当在 iPhone 上的 Safari 中单击该链接时 我收到以下错误消息 Safari cannot download this file 我在这里读过类似的问答 并且 MIME
  • 使用 Delphi 调用 Http POST url 最简单的方法是什么?

    受到问题的启发使用 Delphi 调用 Http GET url 最简单的方法是什么 https stackoverflow com questions 301546 whats the simplest way to call http
  • 我应该如何处理 wiki 页面内容中的自动链接?

    我所说的自动链接是指将页面内容中内嵌的 wiki 链接生成为页面超链接 如果存在 或创建链接 如果页面不存在 的过程 对于我正在使用的解析器 这是一个两步过程 首先 解析页面内容并从源标记中提取到 wiki 页面的所有链接 然后 在生成最终
  • 在闭包作用域中设置变量

    我想我明白为什么变量存在于声明它们的函数之外 因为您要返回另一个函数 myFunction function var closure closure scope return function return closure A myFunc
  • 当我按下后退按钮时,活动会发生什么?

    当我在活动 A 此处 LoginActivity 上并使用 Intent 转到活动 B 此处 MainActivity 并调用 finish 函数时 在意图函数之后 例子 if isloggedIn val intent Intent th
  • 收到错误“要替换的项目数不是替换长度的倍数”

    我正在尝试使用以下命令将记录转换为日期和时间格式strptime功能 但是 我不确定为什么会收到错误 要替换的项目数量不是替换长度的倍数 我尝试使用以下命令检查记录的长度length函数 但两者具有相同的长度 data lt DT head
  • Elasticsearch更新索引模板

    我有一个关于elasticsearch索引模板的问题 有一个我的问题的场景 为一系列索引创建一个模板 名为templateA 并且有一些从此模板创建的索引 名为Index yyyy mm dd2 and Index yyyy mm dd2
  • 在 C# XML 文档中,只有摘要标记有效

    我正在尝试为我的 VS 代码作业添加 XML 文档 但当将鼠标悬停在函数 变量上时 仅显示摘要块中的文本 它也发生在普通的 Visual Studio 和多 台计算机上 所以我认为这只是我不明白的事情 但我尝试用谷歌搜索它并没有得到任何结果
  • Go 中的构造函数

    我有一个结构 我希望用一些合理的默认值来初始化它 通常 这里要做的是使用构造函数 但由于 Go 并不是传统意义上的真正的 OOP 因此它们不是真正的对象 并且它没有构造函数 我注意到了 init 方法 但那是在包级别 还有其他类似的东西可以
  • db2 类型 4 驱动程序下载

    我想使用 java 应用程序连接到 Db2 数据库服务器 我使用 type4 驱动程序 您能告诉我下载 DB2 Type4 驱动程序的确切位置吗 提前谢谢 实际上推荐的方法是从您正在使用的 DB2 服务器获取它 因为它保证您获得它们的正确版
  • Reflection with Swift - 获取类的函数名称[重复]

    这个问题在这里已经有答案了 我想知道是否有办法获得一些有用的班级构成信息 例如 我发现能够访问类的所有可用函数非常有用 看来MyrrorType但这不是我要找的 我知道我可以使用获取函数名称 FUNCTION 但这并不正是我所需要的 我需要
  • 警告:POST 内容长度 90612004 字节超出了第 0 行未知中 8388608 字节的限制

    我收到这个错误 警告 POST 内容长度 90612004 字节超出了限制 第 0 行未知中的 8388608 字节 我做了一些搜索并改变了post max size and upload max filesize到 150M 并重置 Wa
  • GWT/Java 中等待多个异步事件完成的干净方法

    在 Java 中等待多个异步回调函数完成然后再继续的最佳方法是什么 具体来说 我将 GWT 与 AsyncCallback 一起使用 但我认为这是一个普遍问题 这就是我现在所拥有的 但肯定有更干净的方法 AjaxLoader loadApi
  • 在 Xcode4 中,新的界面生成器显示“无选择”

    我正在使用 xcode 4 02 进行 iPhone 编程 在新的界面生成器中 当我单击按钮 或任何其他 GUI 元素 并转到 属性检查器 时 它会显示 无选择 有一段时间我以为我可以通过保存 nib 文件来解决问题 但它并不总是有效 我怎
  • 将 javascript 添加到扩展 django 模板以进行 google 分析

    我有一个漂亮的小index html 文件 它是一个扩展模板 它的父文件是一个base html 文件 在我的例子中是base2 html 我试图将谷歌分析代码片段添加到我网站上的某些文件中 事实证明 如果我在扩展模板的标签中添加任何内容
  • Rails - 从我的观点中移出计算?

    目前我正在按照我的观点进行一些计算 这当然是一件坏事 我正在研究可以帮助我重构上述问题的方法 一件事是将计算移至我的控制器 category sum transaction sum amount cents 这可能是更好的解决方案 但你知道