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等
-
# 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
# 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即可
-
class
ApplicationController < ActionController::Base
-
helper :formatting, :path
-
end
class ApplicationController < ActionController::Base
helper :formatting, :path
end
或者直接使用
helper :all
来使用所有的Helper
分享到:
相关推荐
gem 'foundation_rails_helper' , '~> 3.0' 然后执行: $ bundle 兼容性 仅完全支持Rails 4.1 / 4.2 / 5/6和Foundation 6 某些功能可能适用于Foundation 5及更早版本,但结果可能会有所不同,并且
在项目目录中运行: $rails s我的方法思考过程当我得到问题陈述时,这些是我最初的指导性问题: 从用户的角度来看,真正的问题是什么? 成功会是什么样? 我需要测试什么才能确保其正常工作? 我将如何对数据建模?...
### Rails 101 入门电子书知识点详解 #### 一、简介 《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别...
《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...
5. **辅助方法(Helper Methods)**:为视图提供便利的功能,如链接生成、样式辅助等。 6. **Scaffold**:快速开发工具,可以自动生成用于CRUD(创建、读取、更新、删除)操作的基本控制器、模型和视图。 7. **...
Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...
6. **ActiveSupport**:这是Rails的一部分,包含大量实用的工具类和方法,如时间/日期处理、JSON解析和编码等。 7. ** erb模板**:Rails默认的视图模板引擎,允许在HTML中嵌入Ruby代码。 8. **Scaffold**:Rails的...
- **Helper**:辅助方法,提供在视图中复用的函数。 - **Controller**:处理HTTP请求,调用模型并决定如何呈现视图。 - **Session** 和 **Cookie**:用于跟踪用户状态,如登录信息。 - **Authentication** 和 **...
Rails 2.0 API 文档是一个非常宝贵的资源,它为开发者提供了全面的指南,以便于在使用Ruby on Rails 2.0版本时更好地理解和利用其框架功能。Ruby on Rails(简称Rails)是一个开源的Web应用框架,它遵循MVC(模型-...
Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...
7. **Helper方法**:为了保持视图的简洁,Rails允许你在helper模块中定义辅助方法,然后在视图中调用。 8. **测试驱动开发(TDD)**:Rails鼓励使用测试来驱动开发,内置了Test::Unit和RSpec等测试框架。 9. **...
从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...
标题 "Rails" 指的是 Ruby on Rails,一个开源的Web应用程序框架,它基于Ruby编程语言,遵循MVC(模型-视图-控制器)架构模式。Rails由David Heinemeier Hansson在2004年创建,其设计理念是强调代码的简洁性、DRY...
Rails指南中文版是针对Ruby on Rails框架的一份详尽教程,旨在帮助开发者深入理解并熟练掌握这个强大的Web应用开发工具。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-...
7. `activesupport-2.3.8.gem`:ActiveSupport包含了许多实用的工具类和模块,如日期和时间处理、JSON解析等,广泛用于Rails应用。 8. `actionmailer-2.3.8.gem`:ActionMailer用于发送电子邮件,是Rails中处理邮件...
在开发Web应用时,Ruby on Rails(简称Rails)框架因其高效、简洁的代码风格和强大的社区支持而备受青睐。Aptana是一款强大的集成开发环境(IDE),尤其适用于Rails项目的开发,它提供了丰富的特性来提升开发效率。...
### Rails 101S: 初学者必备的Ruby on Rails 宝典 #### Introduction: 深入了解Ruby on Rails 《Rails 101S》是一本为Ruby on Rails初学者准备的手册,旨在帮助新手快速入门并掌握基本的开发技能。本手册将从最...
- **ActionDispatch**:ActionDispatch是Rails中处理HTTP请求的核心模块,负责解析请求并将请求分发到合适的控制器方法。 - **渲染到视图**:解释如何将模型数据传递给视图进行展示,以及如何定制视图层的行为。 - *...
《Rails 3 in Action》是2011年由Ryan Bigg撰写的一本关于Ruby on Rails框架的权威指南,专门针对当时最新的Rails 3.1版本进行了深入解析。这本书旨在帮助开发者充分利用Rails 3.1的强大功能,提升Web应用开发的效率...