新手问题 关于 rails 中 helpers 的作用域问题。

wcc526 · 2014年05月11日 · 最后由 wjeasys 回复于 2016年08月19日 · 2254 次阅读

http://railstutorial-china.org/chapter8.html#section-8-1

我在学习 railstutorial 的时候发现一个 rails 对 helpers 的作用域不加限制的问题

Mike 把 signed_in?方法写在 helpers/sessions_help.rb 中,但是这个 signed_in?方法是全局可见的?这样不会带来代码不好维护性吗?

不是全局的。context 是 ActionController 和 ActionView。

sorry,我问题没说清楚,这个 signed_in?方法在 ActionView 和 ActionController 中不是全部可见吗?我所有的 html.erb 文件都可以访问到这个方法。这样代码结构不是有点乱,为什么不是我引用哪个 helper,就只能访问哪个 helper 的方法吗? #1 楼 @billy

@wcc526 你看这一句,

class ApplicationController < ActionController::Base
  include SessionsHelper

所以这个方法在所有的 controller 和 view 里面可见。

#3 楼 @billy 谢谢!是我弄错了,我没看清楚。

但是这种直接在 ApplicationController 中 include SessionsHelper 的做法合适吗?不如直接写到 application 中?

#5 楼 @wcc526 没记错的话不 include 的话只能在 ActionView 里面用,如果直接写到 application 里的话,不符合 DRY 原则吧

其实你可以在 helper 里面写个 binding.pry,然后看一下 self,你会发现它的 context 其实就是 ActionView

#3 楼 @billy 你好,我现在使用的是 Rails 5 +Ruby 2.3.1。也遇到 helpers 的作用域问题,我在 helpers 目录的任意一个 helper 文件中定义方法,在所有的 view 里面都可以引用。您贴出的代码我在工程中没有看到。

上面这个是我看 rails 实战圣经里面看到的,作者说的 helper 是全域的,定义在任意一个文件中都是可以的,这是不是说现在的版本中,helper 已经没有作用域这个概念了吗?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号