`
sean
  • 浏览: 16327 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

澄清对helper的一些错误认识

阅读更多
helper主要是帮助视图尽可能将代码从视图中隔离出来, 并提高视图之间代码的可重用性. 基于此, rails为我们做了一些"连接"工作:
  1. 每一个controller都对应一个helper module,例如对应UserController的是UserHelper, rails内部做了一些连接工作,使得默认每个controller下的所有视图都可以访问相应helper 的方法.
  2. rails内置一个全局helper:ApplicationHelper, rails内部做了一些连接工作,使得默认“所有controller”下的视图都可以访问ApplicationHelper下 的方法.
上面两条有时容易让人产生迷惑:
  1. 对于上面的第一条, 是不是每个controller本身也可以默认访问相应helper 的方法? 答案是不可以. 因为上面提到的helper是针对“视图”(而不是controller)提高代码隔离和重用的帮手, 所以默认只有视图才能访问到相应的helper的方法. 但是如果你有充分的理由要在controller中访问helper的方法, 你可以自己做:
    ruby 代码
     
    1. class UserController < ApplicationController  
    2.    include UserHelper  
    3. end  

  2. 同理, 对于上面的第二条, 是不是所有controller也可以默认访问ApplicationHelper 的所有方法?答案同样是不可以,原因同上.如果一定要这么做,因为所有的controller都继承ApplicationController, 所以可以这样:
    ruby 代码
     
    1. class ApplicationController < ActionController::Base  
    2.   include ApplicationHelper  
    3. end  

有时我们可能想将某个controller的helper下的一些方法共享给其他controller,比如想将UserHelper下的一些方法共享给PhotoController下的所有视图, 其中一种方案是将UserHelper下的方法放到ApplicationHelper中, 这样所有的controller下的视图都能访问到这些方法.另外两种方案如下:
  1. PhotoController include UserHelper:
    ruby 代码
    1. class PhotoController < ApplicationController  
    2.    include UserHelper  
    3. end  
  2. 使用helper方法
    ruby 代码
     
    1. class PhotoController < ApplicationController  
    2.   helper :user  
    3. end  

这里容易使人产生迷惑的是这两种方法有什么不同:第一中方案会使PhotoController 和 其下的所有视图都能访问UserHelper的方法;而第二种方案仅会使PhotoController的所有视图能访问UserHelper的方法, 而PhotoController本身则不能。
分享到:
评论

相关推荐

    MySQLHelper类 C#

    下面我们将深入探讨MySQLHelper类的一些核心功能和使用方法。 1. **数据库连接管理**: - MySQLHelper类通常会封装`MySqlConnection`对象的创建、打开、关闭和释放。这样可以避免资源泄露,提高程序的健壮性。在...

    PrecisionHelper绿色版

    3. **示例项目**:如"Samples"文件夹下的内容,可能包含了一些预设的示例项目,如"VirtualTreeview.chm",这些示例有助于用户了解如何组织和构建自己的帮助文档。 4. **代码相关**:"PrecisionHelper.cs.chm"和...

    C# 各种helper类

    这些Helper类通常包含了对常用数据类型、文件操作、网络通信等的便捷处理方法。以下将详细介绍标题和描述中提到的一些关键Helper类以及它们的相关知识点: 1. **String Helper**: String类是C#中的基本类型,但它...

    OracleHelper oracle数据库访问 多种方式 可靠 强大

    此外,OracleHelper还可能包含了错误处理和异常捕获机制,帮助开发者快速定位和解决数据库操作过程中可能出现的问题。同时,为了提高安全性,OracleHelper可能支持连接池管理,减少数据库连接创建和销毁的开销,同时...

    C# .net core MongoDBHelper

    C# .net core MongoDBHelper C# .net core MongoDBHelper C# .net core MongoDBHelper C# .net core MongoDBHelper C# .net core MongoDBHelper C# .net core MongoDBHelper C# .net core MongoDBHelper C# .net ...

    HttpClientHelper 工具类

    5. **异常处理**:HttpClientHelper 应该包含了适当的错误处理机制,如捕获网络异常、解析异常等,以确保在出现问题时能够给出适当的反馈。 6. **HTTP请求配置**:可能还提供了设置超时、添加HTTP头、携带Cookie等...

    XMLHelper XMLHelper

    ### XMLHelper类在C#中的应用与解析 #### 概述 XML(可扩展标记语言)是一种用于存储和传输数据的格式,它以其强大的结构化数据表示能力在各种应用程序之间进行数据交换。在C#中,`XMLHelper`类提供了一系列方法来...

    Kext Helper for mac

    标题中的“Kext Helper for mac”是一款专为Mac OS X操作系统设计的工具,主要用于协助用户在苹果电脑上安装内核扩展(Kernel Extension,简称kext)文件。内核扩展是Mac OS X系统中用于增强或修改核心功能的二进制...

    MySqlHelper

    MySQLHelper可能会包含一些性能优化策略,例如连接池管理,它可以帮助减少创建和销毁数据库连接的开销,提高应用的响应速度。 8. **异步操作** 高级版本的MySQLHelper可能还会提供异步操作方法,如`...

    iphelper.rar

    5. **错误处理与调试**:为了方便开发者调试,`iphelper`库通常会提供丰富的错误处理机制,当出现网络问题时,能够提供清晰的错误信息,帮助开发者定位并解决问题。 6. **跨平台兼容**:考虑到C++应用的广泛性,`ip...

    OracleHelper.vb

    OracleHelper.vb 旨在简化Oracle数据库的访问,为开发者提供一套便捷、高效的API接口,以实现对Oracle数据库的CRUD(创建、读取、更新和删除)操作。这个类库的核心目标是提高开发效率,减少与数据库交互时的代码量...

    ios helper用于苹果ios系统的实用工具

    无论是在设置新设备、同步数据,还是解决系统错误,用户都可以在iOS Helper中找到解决方案,降低使用难度,提升用户体验。 总结来说,iOS Helper是一款针对苹果iOS系统的全方位实用工具,它集系统管理、数据备份、...

    MavenHelper.zip

    然而,随着项目规模的扩大,依赖管理变得复杂,可能出现依赖冲突,即不同库对相同依赖的不同版本需求不一致。这种情况下,MavenHelper插件就显得尤为必要。 MavenHelper插件的主要功能包括: 1. **快速查找依赖...

    XPathHelper_2.0.2.zip

    XPath Helper的一些关键特性包括: 1. **即时反馈**:在输入XPath表达式后,插件会立即高亮显示匹配的节点,便于快速验证表达式的正确性。 2. **上下文信息**:提供当前选中节点的相关信息,如节点名称、类型、值等...

    XPath Helper版本2.0.2

    XPath Helper是一款非常实用的工具,尤其对于Web开发者和数据抓取者来说,它极大地简化了在网页中查找和提取信息的过程。版本2.0.2是这个插件的一个更新,旨在提供更稳定、高效的功能。XPath(XML Path Language)是...

    OracleHelper—数据库操作类

    9. **性能优化**:为了提升性能,OracleHelper可能包含一些优化策略,比如缓存查询结果、延迟加载等。 10. **线程安全**:在多线程环境下,OracleHelper需要确保其方法是线程安全的,避免并发访问时出现的问题。 ...

    C#数据库操作类AccessHelper实例

    AccessHelper通过try-catch块捕获并重新抛出异常,这有助于在出现错误时提供详细的错误信息,便于调试和问题定位。 8. **实用价值**: AccessHelper类这样的工具对于快速开发和简化数据库操作的代码很有帮助,特别...

    xpath-helper

    在使用XPath Helper进行网页数据提取时,你需要了解一些基本的XPath概念,例如节点类型(元素、属性、文本等)、轴(如祖先、后代、兄弟等)、路径表达式以及函数。通过熟练运用这些概念,你可以编写出高效的XPath...

    OracleHelper

    6. **异常处理**:OracleHelper会包含适当的错误处理机制,捕获并处理可能出现的OracleException或其他相关异常,提供友好的错误信息给调用者。 7. **性能优化**:OracleHelper可能会利用Oracle数据库特有的特性,...

    XMLHelper 封装类

    9. **性能优化**:考虑到XML操作的效率,XMLHelper可能会包含一些性能优化措施,如缓存重复的解析结果、减少内存占用等。 10. **示例代码**:提供的`XMLHelper_Demo`文件可能包含了XMLHelper类的使用示例,帮助...

Global site tag (gtag.js) - Google Analytics