2008-04-23
Share methods in Controller and Helper (Rails)
关键字: helper method
在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来实现公用。代码存在一定的安全隐患。
Helper方法放在controller中,通过helper_method来实现公用。代码安全。
private
Helper方法放在Helper中,通过include module_name向controller暴露,代码安全
include FullModuleName
Helper方法放在一个独立的module中,helper和controller通过include这个module来获得公共方法。
include CommonModuleName
关于include module需要注意的是,它不会帮助你去自动解决module依赖性的问题。
如果方法中需要引入其他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依赖性的问题。
发表评论
- 浏览: 5649 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
我的相册
63dad6c7-7277-4b29-a306-7ee133078881
共 1 张
共 1 张
最近加入圈子
最新评论
-
window+lighttpd+php 配置 ...
哈哈,配置管理 == 系统配置 ? 这个东西怎么应用于配置管理呢?
-- by right now -
window+lighttpd+php 配置 ...
这个帖子不错,不过,我准备在linux平台上搭建一下lighttpd和PHP。有 ...
-- by LIMIMGJIE -
socket 模型简介
很好的文章; 看来Linux上采用 epoll是不错的方案; 在FreeBSD ...
-- by bohemia -
对IN & EXISTS NOT IN & N ...
我对于程序已经失去了兴趣.....
-- by zl584521 -
发现了jrockit好用东东
谢谢小吉分享,呵呵
-- by zl584521






评论排行榜