- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个 Controller ,其中包含一个呈现 View 的操作。 View 需要数据来呈现。我知道以下方法来准备并将其发送到 View :
使用实例变量
class CitiesController < ApplicationController
def index
@cities = Cities.order(:name).limit(10)
end
end
这是默认方法,可以在 Rails documentation 中找到, 但它也有一些缺点:
使用辅助方法
class CitiesController < ApplicationController
helper_method :cities
def index
end
def cities
@cities ||= Cities.order(:name).limit(10)
end
end
这是我最喜欢的方式。它保持操作方法干净,所以我可以在那里实现 Controller 逻辑,而不是将它与数据准备混合在一个方法中。此外,无需在 View 中使用神秘的实例变量,从而使它们相互隔离。然而:
products
的方法,它会为不同的操作返回不同的数据(当然,我可以在一个方法中完成,但它看起来很难看)。 使用门面模式
本文部分解决了问题:https://medium.com/p/d65b86cdb5b1但我不喜欢这种方法,因为它在 View 中引入了一个@magic_facade_object
。
使用继承的资源
它在示例中可能看起来很漂亮,但在我看来,当涉及到实际代码时, Controller 代码很快就会变成意大利面条怪兽。另一件事是,页面 View 通常不仅需要资源,还需要其他数据来呈现(侧边栏 block 等),我仍然必须使用另一种方式来准备它。结合不同的方法会使代码更难读。最后,我不喜欢使用 resource
变量,因为它不太清楚 View 是关于什么的。
所以,问题来了。您如何保持 Controller 清洁?
最佳答案
How do you keep your controllers clean?
通过编写 DRY 代码并在周围散布一些 gem 魔法。
看了你的要点,我想我对大部分内容都有不同的看法。
@cities = Cities.order(:name).limit(10)
正是我认为属于 Rails Controller 的东西,它没有违反最小惊喜原则,它是有点相反。实例变量是将变量从 Controller 传递到 View 的默认方式,尽管这是一件非常丑陋的事情。这就是“rails 方式”(TM)!
decent_exposure消除了大部分这些顾虑
请停止将老派模式应用于 Rails 或 Ruby 代码。它真的只在大型应用程序中有用,在这些应用程序中,您正在努力保持理智地处理单个 Controller 方法中的代码量。编写干净的代码,彻底测试它,80% 的时间你会没问题。
不要使用“一刀切”的工具。大多数情况下,您需要编写比使它工作所需的代码更多的配置。通过这种事情,它也变得更加复杂。
关于ruby-on-rails - 清洁 Controller : preparing data for views,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21245926/
我对 MySql 有疑问,详情如下:我创建了一个新的模式/数据库,(仅)执行了这个查询: create table mytable ( id varchar(50) not null, name va
我正面临着 continuum 的发布问题:准备阶段在 scm-check-modifications 步骤中失败并出现错误: [ERROR] org.apache.maven.shared.rele
由于我要连接到外部数据库,因此我需要一种仅在必要时(如果有查询)才连接到数据库的方法。 我在 StackOverflow 上找到了这个答案:Auto connecting to PDO only if
每次我尝试将中等大小的 JSON 对象同步到我的数据库时都会遇到这个问题,以便我们可以对其执行一些报告。通过调查可能导致它的原因,我发现了有关此事的这些链接。 http://blog.corrlabs
我有从多个表返回结果的 MySQL View , 我正在尝试从 laravel 项目的这个 View 中进行一些查询, 本地服务器没有问题 但在远程服务器上显示以下错误 "General error:
我重写了我的网站 php 代码并添加了 MySQL 存储过程。 在我的本地版本中,一切正常,但在我将网站上传到托管服务器后,我不断收到 fatal error “准备好的语句需要重新准备”。 有时页面
我重写了我的站点 php 代码并添加了 MySQL 存储过程。 在我的本地版本中,一切正常,但在我将我的网站上传到托管服务器后,我不断收到 fatal error “Prepared statemen
我重写了我的站点 php 代码并添加了 MySQL 存储过程。 在我的本地版本中,一切正常,但在我将我的网站上传到托管服务器后,我不断收到 fatal error “Prepared statemen
我在运行批处理作业时收到以下错误。 sql.SQLException: Prepared statement needs to be re-prepared 什么情况下会遇到此错误? 最佳答案 这是一
prepare for segue 和 prepare for unwind 之间有什么区别?我已经将这两个实现到 Xcode 项目中,它们都得到了相同的结果。我实现这两个功能的代码是:(with p
作为指南,用于准备测试数据库的命令是 bundle exec rake db:test:prepare 但是,我发现以下命令也有效并为我创建了测试数据库。 bundle exec rake test:
我最近启动了我的基于 Laravel 的网站,我没有遇到任何问题,但是 40 分钟前当我检查它时我得到了这个错误: SQLSTATE[HY000]: General error: 1615 Prepa
更新:查询工作正常,如下所示;当我从 View 中选择时,错误只会出现。 $query = " SELECT ModuleID, ModuleName, Credits, Lecturer, Room
我的laravel项目每天早上都会出错,一段时间后就没事了。我不明白这是什么问题。 我用谷歌搜索了一下,发现了一些类似的问题。但这并不能解决我的问题。 db version is 5.1.1 最佳答案
所以根据this link一个是快捷方式包装器(所以我猜它们是一样的)。 当我运行 bundle exec rake db:test:prepare 时,我得到了这个错误: Don't know ho
我有两个 View ,第一个是一个简单的 View ,其中包含一些有关用法的介绍,通过单击按钮可以打开主视图。主视图有很多图像和两个自定义的表格,行由文本和图像组成,因此主视图的创建相当慢。分析器显示
大约 10 天前,我向我的 iTunes Connect 帐户添加了两个应用程序。一个是“轻型”版本,另一个是收费的。完整版本已经在应用商店上架,但免费版本的状态只是“准备上传”。十天后!一定有什么问
我在运行 mvn release:prepare 时遇到问题。我有以下消息: [ERROR] Failed to execute goal org.apache.maven.plugins: mave
我正在 MainActivity 处理程序的帮助下更新进度条但它给出了错误:无法在未调用 Looper.prepare() 的线程内创建处理程序 Error public class MainActi
在我的 django 项目中,我有 4 个模型,它们都连接在一条链中。 模型_D > 模型_C > 模型_B > 模型_A 因此 Model_C 有一个指向 Model_B 的外键字段,而 Model
我是一名优秀的程序员,十分优秀!