`
hijack
  • 浏览: 37353 次
  • 性别: Icon_minigender_1
  • 来自: Mars
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Share methods in Controller and Helper (Rails)

阅读更多
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依赖性的问题。
分享到:
评论
4 楼 lgn21st 2008-04-16  
这个,我就尽量不用,或者找模型来代理,尽量让controller变得简单,至少model比较容易写测试,而测试controller我不喜欢。。。
3 楼 7thbyte 2008-04-16  
原则上,helper产生的返回值都是
<div>....</div>
这样的HTML字符串。

一般用来进行view的页面元素拼接工作。

不宜放入其他逻辑。更不宜放入其他逻辑后被controller调用。

否则的话就要检讨一下代码是否良构了。
2 楼 zeroleonhart 2008-04-16  
helper是为template准备的,在controller中调用helper的方法本来就是不对的
公用方法应该很少才对,因为helper是为页面而准备的,基本上都是一些输出函数,而controller里是不应该出现这些函数的
正确的方法应该是将这些方法写到对应的model里,如果无法归类到某一个model,还可以将其写到lib里面(注意文件名),甚至是config/initializers内(需要重启rails才能生效)
1 楼 baryon 2008-04-16  
在RoR2.0的class ApplicationController里有一句
  helper :all # include all helpers, all the time
按理说就可以从各个controller里面使用helper里的方法了。
可是我的实践却不成功
不在controller里面明确地include自己想要的helper module就不成,不明所以!

另外,view里可以使用helper里的方法,是在怎么做到的呢?rails在哪里做了什么工作呢?

相关推荐

    C# XML demo,C# XML入门,XmlHelper

    If you already have experience in XML, you will probably benefit by using the methods available in XmlHelper. The article evolves from simple concepts about XML to creation of XML documents, to ...

    好用的rails 2.0 Api 文档

    视图助手(Helper methods)是一系列用于帮助生成视图内容的函数,比如form_for、link_to等,它们可以使视图代码更简洁,更易于理解。 **6. Routing** Rails的路由系统(routes.rb)将URL映射到控制器的特定动作上...

    serenity-controller-helper

    npm install git+https://github.com/riteshsangwan/serenity-controller-helper.git 依赖关系 宁静数据源(访问数据源) serenity-route-helper(处理响应) serenity-param-helper(解析请求查询过滤器) ...

    Rails相关电子书汇总

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

    Rails 101 入门电子书

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

    lc1-node-controller-helper:构建控制器功能以进行均衡的节点模块

    通过 npm 和 git 安装 npm install git+https://github.com/appirio-tech/lc1-node-controller-helper.git依赖关系lc1-node-datasource(访问数据源) lc1-node-route-helper(处理响应) lc1-node-param-helper...

    Apress - Practical Rails Projects (Oct 2007)

    视图方面,会涵盖ERB模板语言的使用,以及如何利用辅助方法(Helper Methods)来增强视图的功能。控制器部分则会介绍动作、HTTP请求和响应,以及如何使用过滤器来实现逻辑控制。 书中还会涉及Rails的测试驱动开发...

    rails 项目起步示例

    Rails是Ruby语言的一个著名Web开发框架,全称为Ruby on Rails,它遵循MVC(Model-View-Controller)架构模式,旨在提高开发效率和代码可读性。本示例"rails项目起步示例"是一个购物系统,非常适合初学者入门学习。 ...

    Ruby on Rails中文指南

    Ruby on Rails,简称Rails,是一款基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在提升开发效率和代码的可读性。Rails以其“约定优于配置”的设计理念,以及“DRY(Don't Repeat ...

    Rails入门教程一(翻译).pdf

    Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式,强调“约定优于配置”和“Don't Repeat Yourself”(DRY)原则,从而提高开发效率。 本教程首先会...

    ruby on rails(开发文档)

    Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,极大地简化了Web应用的开发过程。Rails的哲学是“约定优于配置”,鼓励开发者遵循一套标准的...

    ruby on rails 2.3.5 api html版

    在Rails中,这些组件通过ActiveRecord、ActionView和ActionController被实现。 3. **ActiveRecord**:这是Rails用于数据库交互的ORM(对象关系映射)库。它允许开发者使用Ruby代码操作数据库,无需编写SQL语句。 4...

    webdriver-helper安装包,whl版本

    webdriver-helper安装包,whl版本

    rails 2.2.2 API

    6. **辅助方法(Helper Methods)**:为视图提供了一些实用的函数,如链接生成、表单构建等,帮助保持视图的简洁。 7. **插件(Plugins)**:Rails 社区提供了大量的插件,可以扩展框架的功能或提供特定的解决方案...

    Ruby On Rails开发实例-源代码

    以及Rails框架的核心概念,如路由(Routing)、控制器(Controllers)、视图(Views)、模型(Models)、ActiveRecord、助手方法(Helper Methods)、会话(Sessions)和缓存(Caching)等。 实际操作时,你需要先...

    rails-controller-testing:将`assigns`和`assert_template`带回到您的Rails测试中

    Rails :: Controller :: Testing 这个gem将assigns给控制器测试的内容... 如果您使用的是rspec-rails的旧版本,则可以在rails_helper手动添加模块。 RSpec . configure do | config | [ :controller , :view , :re

    C# 各种helper类

    在C#编程中,"Helper"类是一种常见的设计模式,用于封装特定功能或一组相关功能,使得代码更易于理解和维护。这些Helper类通常包含了对常用数据类型、文件操作、网络通信等的便捷处理方法。以下将详细介绍标题和描述...

    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及更早版本,但结果可能会有所不同,并且

Global site tag (gtag.js) - Google Analytics