首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Rails使用什么Ruby技术使我的控制器方法呈现视图?

Rails使用什么Ruby技术使我的控制器方法呈现视图?
EN

Stack Overflow用户
提问于 2010-12-20 06:25:24
回答 3查看 3.4K关注 0票数 11

只是好奇是否有人知道在Rails框架中使用什么Ruby技术来完成下面的任务。

如果我不在Rails控制器上编写index方法,那么Rails仍然会呈现索引视图文件,如果该路径与该路径匹配的话。这是有意义的,因为我的控制器继承自父类,父类必须有自己的index方法。

但是,如果我do定义了一个index方法,并且只告诉它设置一个实例变量,它仍然呈现适当的视图。例如:

代码语言:javascript
运行
AI代码解释
复制
def index
  @weasels = Weasel.all

  # If I omit this line, Rails renders the index anyway.
  # If this behavior is defined in the parent class's index method,
  # it seems that by overriding the method, my index wouldn't do it. 
  # I'm not explicitly calling super to get the method from 
  # ActionController::Base, but maybe Rails is doing something like that?
  render :index
end

在纯Ruby中,我希望必须调用super才能得到这种行为。

我假设Rails使用某种元编程技术来保证我的控制器方法将调用super。如果是的话,有人能解释吗?你能指出这样做的源代码吗?

更新

正如Mladenć所指出的,我最初的心智模型是错误的;控制器方法通常不会呈现视图;相反,--控制器方法--视图呈现都是由一些框架代码调用的。这一点很明显,因为我可以使用任何名称(例如,search )创建一个控制器方法,而search视图将被呈现。因此很明显,在这种情况下,我没有重写父方法,一些框架代码正在解析控制器方法名称并查找匹配的视图。

但是,框架必须能够检测控制器方法是否已经调用了render。所以这对我来说是另一个小秘密。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-20 08:47:25

在控制器上,有一个名为render_for_text的方法。这将接受一个字符串,并将结果设置为响应体。即使不呈现为文本,呈现视图文件也只是读取文件的内容、计算它并将其传递给render_for_text方法。然后,该方法将一个名为@performed_render的实例变量存储到true,它告诉rails控制器已经呈现了一个视图。

然后有一个名为performed?的方法,它指示是否调用了呈现操作。它通过检查@performed_render@performed_redirect是否为真来做到这一点。

有了上述信息,呈现方法的第一行现在应该是有意义的,并希望回答您的问题:

raise DoubleRenderError, "Can only render or redirect once per action" if performed?

票数 6
EN

Stack Overflow用户

发布于 2010-12-20 06:49:26

在呈现视图时,Rails使用控制器中实例变量的副本初始化适当视图模板的实例。因此,实例变量实际上不是由视图继承的,而是在视图呈现之前从控制器复制到视图中。

我还没有在源代码中查到确切的细节,但是上面的解释至少应该概述一下它是如何工作的。

票数 1
EN

Stack Overflow用户

发布于 2010-12-20 06:58:05

Jamis在几年前写了很多关于隐式路由的文章,这里

我相信你要找的代码在资源里。Rails查看入站请求,如果没有指定控制器和操作(对于RESTful路由)。

更新:控制器是Rails框架的一个非常复杂的部分。它并不像拥有单个方法的单个Ruby类那么简单(这就是为什么并不真正需要super,但是在调用单个方法之前和之后都会进行一系列调用。

Rack处理请求并将其传递给执行路由的Rails,为操作委托给ActionController实例(您可能已经或没有对其进行编码),然后将结果传递给呈现过程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4490508

复制
相关文章
RabbitMQ跨机房迁移数据零丢失
公司以前大部分服务在私有云上,因使用有一段时间了,机器比较老化再加上运维成本高,计划将整个机房上云,因负责中间件一块,所以最近将RabbitMQ顺利地迁移到云上。
心平气和
2020/09/11
1.5K0
RabbitMQ跨机房迁移数据零丢失
教你打印自己的日志 -- 如何自定义 log4j2 各组件
可以看到,log4j2 框架为我们提供了非常多的组件,在这些各类功能的 appender 与 layout 以及 filter 的组合下,我们能够实现各种使用场景的处理。
用户3147702
2022/06/27
2.7K0
教你打印自己的日志 -- 如何自定义 log4j2 各组件
生成的迁移类
EFCore 2.1出来有一段时间了,里面的新功能还没怎么用,今天研究下如何使用EF Core 2.1添加种子数据。
solenovex
2022/11/24
1.1K0
生成的迁移类
利用BigDecimal类巧妙处理Double类型精度丢失
精度丢失的问题是在其他计算机语言中也都会出现,float和double类型的数据在执行二进制浮点运算的时候,并没有提供完全精确的结果。产生误差不在于数的大小,而是因为数的精度。
BUG弄潮儿
2021/01/05
2.4K0
数据库第一类第二类丢失更新
A事务撤销时,把已经提交的B事务的更新数据覆盖了。这种错误可能造成很严重的问题,通过下面的账户取款转账就可以看出来:
用户1148526
2019/05/25
2.5K0
【愚公系列】2022年04月 微信小程序-项目篇(公交查询)-01周边站点
小程序的周边站点是实时获取当前登录用户的位置信息,进而给出附件公交车站信息,以便用户选择乘车方案。
愚公搬代码
2022/04/21
4400
【愚公系列】2022年04月 微信小程序-项目篇(公交查询)-01周边站点
【愚公系列】2022年04月 微信小程序-项目篇(公交查询)-02周边站点-获取位置和城市信息
逆地址解析:提供由经纬度到文字地址及相关位置信息的转换能力,广泛应用于物流、出行、O2O、社交等场景。服务响应速度快、稳定,支撑亿级调用。
愚公搬代码
2022/04/30
3510
OpenFeign的定制
公司原先的模式是给客户提供统一的功能; 但是需求这种事情无法满足所有客户的需求; 因为各行各业都很卷,客户感觉自己没有被重视,客户会撂挑子不干的呀,因此公司换了一种玩法: 功能对外开放, 客户你不是觉得你提的需求简单嘛, you can you up, no can no bibi;
eeaters
2022/01/19
1.3K0
OpenFeign的定制
iOS关于地图定位基础(二)[通俗易懂]
在前一篇文章 iOS关于地图定位基础(一) 中我们主要总结了 iOS 里面利用原生 CoreLocation 框架实现基本定位功能和一些注意点,侧重点主要是iOS8+之后的定位授权与授权状态的使用。接下来本篇文章主要是讲解如何利用 CoreLocation 框架实现地理定位、区域监听、地理编码的具体实现。(PS:下文涉及我自定义的指南针Demo请去我的GitHub仓库查看源码https://github.com/IMLoser/HWCompass,谢谢大家支持。)
全栈程序员站长
2022/09/17
1K0
iOS关于地图定位基础(二)[通俗易懂]
【Log4j2】Spring 整合 Log4j2 日志框架
.29.
2023/10/17
2430
【Log4j2】Spring 整合 Log4j2 日志框架
HDFS块丢失
(2)hdfs fsck / | egrep -v ‘^.+$’ | grep -v eplica
程裕强
2022/05/06
6810
HDFS块丢失
精度丢失问题
背景 BFF Client 使用的 npm 包 request-promise-native 请求微服务接口返回 ID 精度丢失 1713166949059674112 => 1713166949059674000 为什么会丢失? 存储二进制时小数点的偏移量最大为52位,计算机存储的为二进制,而能存储的二进制为62位,超出就会有舍入操作,因此 JS 中能精准表示的最大整数是 Math.pow(2, 53),十进制即9007199254740992大于 9007199254740992 的可能会丢失精度 参考
编程三昧
2022/02/03
1.9K0
精度丢失问题
丢失的数字
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
_kyle
2020/12/25
9180
Log4j2 日志
Apache Log4j2 是 Log4j 的升级,对其前身 Log4j 1.x进行了重大改进,并提供了Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。
JanYork_简昀
2022/05/23
3730
Log4j2 日志
【Java】Log4j日志
通过PatternLayout实现类ConversionPattern属性可以设置具体自定义布局。布局格式采用类似 C
陶然同学
2023/02/24
4900
【Java】Log4j日志
你在小程序中怎么计算两个经纬度的距离?
在没有官方支持时,小程序中的位置获取,可以采用腾讯地图,高德地图,百度地图都可以,但是你需要先通过小程序的wx.getLocation 获取当前的经纬度,然后再借助第三方地图提供的webservice API ,自己在后端实现一个根据经纬度获取当前位置的接口,然后供小程序调用。
酒馆丁老师
2020/09/17
3.1K0
你在小程序中怎么计算两个经纬度的距离?
访问Github样式丢失
哎提起来就伤心, 本人居住在北京(某某公寓), 使用的changchen带宽, 100/月(吐槽坑人的房栋)无法自己拉网线
零式的天空
2022/03/27
1.7K0
解决session丢失问题
在asp.net里面,很多时候使用session来保存一些对象,比如说购物车等等,有很多时候,就算你设置了session超时的时间,session还是会无缘无故的丢失,这里有一种比较简单的方法可以设置session丢失的时间。 在web.config里面如下配置
Isaac Zhang
2019/09/10
1.5K0
动态迁移_动作迁移
在虚拟化环境中的迁移,又分为动态迁移,静态迁移,也有人称之为冷迁移和热迁移,或者离线迁移在线迁移;静态迁移和动态迁移的 区别就是静态迁移明显有一段时间客户机的服务不可用,而动态迁移则没有明显的服务暂停时间,静态迁移有两种1,是关闭客户机将其硬板镜像复制到另一台宿主机系统,然后回复启动起来,这种迁移不保留工作负载,2是,两台客户机公用一个存储系统,关闭一台客户机,防止其内存到另一台宿主机,这样做的方式是,保存迁移前的负载
全栈程序员站长
2022/11/17
1.5K0
Log4j2使用案例
用一个root logger做入口,进入多个appender,在appender中分等级记录。 好处是root定一个级别,进去后可以灵活的使用多个级别。
mingjie
2022/05/12
1980
Log4j2使用案例

相似问题

JSONObject["locationInfo"]不是字符串

410

Django丢失迁移文件

138

MyBatis迁移-如何应用丢失的迁移

11

属性加载的log4j2迁移

112

从log4j2迁移到logback

17
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档