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

wcc526 · May 11, 2014 · Last by wjeasys replied at August 19, 2016 · 2254 hits

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 已经没有作用域这个概念了吗?

You need to Sign in before reply, if you don't have an account, please Sign up first.