浏览 4818 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-06
Share methods in Controller and Helper (Rails)
在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依赖性的问题。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-04-16
在RoR2.0的class ApplicationController里有一句
helper :all # include all helpers, all the time 按理说就可以从各个controller里面使用helper里的方法了。 可是我的实践却不成功 不在controller里面明确地include自己想要的helper module就不成,不明所以! 另外,view里可以使用helper里的方法,是在怎么做到的呢?rails在哪里做了什么工作呢? |
|
返回顶楼 | |
发表时间:2008-04-16
helper是为template准备的,在controller中调用helper的方法本来就是不对的
公用方法应该很少才对,因为helper是为页面而准备的,基本上都是一些输出函数,而controller里是不应该出现这些函数的 正确的方法应该是将这些方法写到对应的model里,如果无法归类到某一个model,还可以将其写到lib里面(注意文件名),甚至是config/initializers内(需要重启rails才能生效) |
|
返回顶楼 | |
发表时间:2008-04-16
原则上,helper产生的返回值都是
<div>....</div> 这样的HTML字符串。 一般用来进行view的页面元素拼接工作。 不宜放入其他逻辑。更不宜放入其他逻辑后被controller调用。 否则的话就要检讨一下代码是否良构了。 |
|
返回顶楼 | |
发表时间:2008-04-16
这个,我就尽量不用,或者找模型来代理,尽量让controller变得简单,至少model比较容易写测试,而测试controller我不喜欢。。。
|
|
返回顶楼 | |