`
ywencn
  • 浏览: 87007 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[转载]rails Helper 解析

阅读更多

http://blog.csdn.net/e_online/archive/2009/04/03/4008306.aspx

 

在Ruby on Rails里面,首先应该明确的一点 —– Helper是view的helper,根据这个原则,在默认实现下,controller是不允许访问helper里面的方法的。当然helper在本 质上是一个module,所以要在controller和helper之间共享一些方法的办法还是很多的。因为是双方都拥有的方法,所以就面临一个问题 —— 方法放在那里比较合理?controller还是helper?我阐述一下我的原则:

如果方法中需要引入其他helper方法,那么我们建议该方法放在helper中;否则,可以放在controller中或者写一个公共 module。放在controller里面需要注意安全性,因为controller里面public的方法很有可能通过URL加以执行,所以我们建议 所有的helper 方法都用private 加以约束。

下面我就详细说一下4中方法。

Helper方法放在controller中,通过ApplicationHelper来实现公用。代码存在一定的安全隐患。
module ApplicationHelper
  def method_missing(method, *args, &block)
    if ApplicationController.instance_methods.include? method.to_s
      controller.send(method, *args, &block)
    else
      super
    end
  end
end

Helper方法放在controller中,通过helper_method来实现公用。代码安全。
private

heper_method :login?
def login?
  # your logic goes here
end

Helper方法放在Helper中,通过include module_name向controller暴露,代码安全
include FullModuleName

Helper方法放在一个独立的module中,helper和controller通过include这个module来获得公共方法。
include CommonModuleName

关于include module需要注意的是,它不会帮助你去自动解决module依赖性的问题。

----------------------------------------补充----------------------------------------

Rails默认为每个controller指定一个helper,所有的helper都放在app/helpers目录下
但是有些Helper我们希望是全局共享的,一般我们将这些Helper方法都扔在ApplicationHelper模块里
其实我们可以在app/helpers目录下建立我们自定义的Helper模块,如formatting_helper、path_helper等
Java代码 复制代码
  1. # formatting_helper.rb   
  2. module FormattingHelper   
  3.   def free_when_zero(price)   
  4.     price.zero? ?  "FREE"  : number_to_currency(price)   
  5.   end   
  6.   
  7.   def yes_no(bool)   
  8.     bool?  'Yes'  :  'No'   
  9.   end   
  10. end   
  11.   
  12. # path_helper.rb   
  13. module PathHelper   
  14.   def articles_path_for_article(article)   
  15.      if  article.tip?   
  16.       tips_articles_path   
  17.      else   
  18.       news_articles_path   
  19.     end   
  20.   end   
  21.   
  22.   def product_path(product)   
  23.      if  product.kind_of? Book   
  24.       book_path(product)   
  25.      else   
  26.       movie_path(product)   
  27.     end   
  28.   end   
  29. end  
# formatting_helper.rb
module FormattingHelper
  def free_when_zero(price)
    price.zero? ? "FREE" : number_to_currency(price)
  end

  def yes_no(bool)
    bool? 'Yes' : 'No'
  end
end

# path_helper.rb
module PathHelper
  def articles_path_for_article(article)
    if article.tip?
      tips_articles_path
    else
      news_articles_path
    end
  end

  def product_path(product)
    if product.kind_of? Book
      book_path(product)
    else
      movie_path(product)
    end
  end
end

要想使用这些Helper,我们只需修改ApplicationController即可
Java代码 复制代码
  1. class  ApplicationController < ActionController::Base   
  2.   helper :formatting, :path   
  3. end  
class ApplicationController < ActionController::Base
  helper :formatting, :path
end

或者直接使用helper :all 来使用所有的Helper
                http://yang-kunlun.iteye.com/blog/267906
分享到:
评论

相关推荐

    foundation_rails_helper:Zurb基金会的Rails Helper框架

    gem 'foundation_rails_helper' , '~&gt; 3.0' 然后执行: $ bundle 兼容性 仅完全支持Rails 4.1 / 4.2 / 5/6和Foundation 6 某些功能可能适用于Foundation 5及更早版本,但结果可能会有所不同,并且

    ParseCSV:Rails应用解析CSV文件

    在项目目录中运行: $rails s我的方法思考过程当我得到问题陈述时,这些是我最初的指导性问题: 从用户的角度来看,真正的问题是什么? 成功会是什么样? 我需要测试什么才能确保其正常工作? 我将如何对数据建模?...

    Rails 101 入门电子书

    ### Rails 101 入门电子书知识点详解 #### 一、简介 《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别...

    Rails101_by_rails4.0

    《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...

    Rails相关电子书汇总

    5. **辅助方法(Helper Methods)**:为视图提供便利的功能,如链接生成、样式辅助等。 6. **Scaffold**:快速开发工具,可以自动生成用于CRUD(创建、读取、更新、删除)操作的基本控制器、模型和视图。 7. **...

    Rails项目源代码

    Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...

    ruby on rails 2.3.5 api html版

    6. **ActiveSupport**:这是Rails的一部分,包含大量实用的工具类和方法,如时间/日期处理、JSON解析和编码等。 7. ** erb模板**:Rails默认的视图模板引擎,允许在HTML中嵌入Ruby代码。 8. **Scaffold**:Rails的...

    rails 项目起步示例

    - **Helper**:辅助方法,提供在视图中复用的函数。 - **Controller**:处理HTTP请求,调用模型并决定如何呈现视图。 - **Session** 和 **Cookie**:用于跟踪用户状态,如登录信息。 - **Authentication** 和 **...

    好用的rails 2.0 Api 文档

    Rails 2.0 API 文档是一个非常宝贵的资源,它为开发者提供了全面的指南,以便于在使用Ruby on Rails 2.0版本时更好地理解和利用其框架功能。Ruby on Rails(简称Rails)是一个开源的Web应用框架,它遵循MVC(模型-...

    关于rails 3.1 cucumber-rails 1.2.0

    Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...

    ruby on rails(开发文档)

    7. **Helper方法**:为了保持视图的简洁,Rails允许你在helper模块中定义辅助方法,然后在视图中调用。 8. **测试驱动开发(TDD)**:Rails鼓励使用测试来驱动开发,内置了Test::Unit和RSpec等测试框架。 9. **...

    rails2-sample

    从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...

    Rails

    标题 "Rails" 指的是 Ruby on Rails,一个开源的Web应用程序框架,它基于Ruby编程语言,遵循MVC(模型-视图-控制器)架构模式。Rails由David Heinemeier Hansson在2004年创建,其设计理念是强调代码的简洁性、DRY...

    rails指南 中文版

    Rails指南中文版是针对Ruby on Rails框架的一份详尽教程,旨在帮助开发者深入理解并熟练掌握这个强大的Web应用开发工具。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-...

    rails2.3.8 && ruby1.8.7

    7. `activesupport-2.3.8.gem`:ActiveSupport包含了许多实用的工具类和模块,如日期和时间处理、JSON解析等,广泛用于Rails应用。 8. `actionmailer-2.3.8.gem`:ActionMailer用于发送电子邮件,是Rails中处理邮件...

    使用Aptana+Rails开发Rails Web应用(中文)

    在开发Web应用时,Ruby on Rails(简称Rails)框架因其高效、简洁的代码风格和强大的社区支持而备受青睐。Aptana是一款强大的集成开发环境(IDE),尤其适用于Rails项目的开发,它提供了丰富的特性来提升开发效率。...

    Rails 101S

    ### Rails 101S: 初学者必备的Ruby on Rails 宝典 #### Introduction: 深入了解Ruby on Rails 《Rails 101S》是一本为Ruby on Rails初学者准备的手册,旨在帮助新手快速入门并掌握基本的开发技能。本手册将从最...

    The Rails 4 Way

    - **ActionDispatch**:ActionDispatch是Rails中处理HTTP请求的核心模块,负责解析请求并将请求分发到合适的控制器方法。 - **渲染到视图**:解释如何将模型数据传递给视图进行展示,以及如何定制视图层的行为。 - *...

    Rails 3 in Action

    《Rails 3 in Action》是2011年由Ryan Bigg撰写的一本关于Ruby on Rails框架的权威指南,专门针对当时最新的Rails 3.1版本进行了深入解析。这本书旨在帮助开发者充分利用Rails 3.1的强大功能,提升Web应用开发的效率...

Global site tag (gtag.js) - Google Analytics