如何在 Ruby 中将 defs/variables 放在更深的堆栈块的“范围内”?

问题描述 投票:0回答:0

对于上下文,我试图做的是让一些上下文对某些方法可用,这样我就不必一直将它作为参数传入,但这不再是我的目标。现在我的目标是了解 Ruby 作用域是如何工作的。

所以: 我正在使用 active_admin。在某些资源控制器中,例如companies.rb,我可以做这样的事情:

  sidebar 'Related', only: [:show, :edit, :new] do
    # debugger
    table do
      tr { th { navigate_to_related :users, company } }
      tr { th { navigate_to_related :teams, company } }
      tr { th { navigate_to_related :groups, company } }
    end
  end

navigate_to_related
是我自己的代码,这里不重要。关键是它需要显示的“公司”对象。

我想做的,最好的情况是,not必须传入

company
,以某种方式让它“在上下文中”。所以我首先想到的是了解“公司”的实际来源。它在上述代码的范围内可用,但我没有声明它,例如做|公司|那么它是从哪里来的呢?

然后我开始疑惑,

controller
action_name
等方法(或者是变量?)是从哪里来的呢?这些对我来说几乎无处不在;它们实际存在于什么范围内,为什么我可以在侧边栏范围内使用该范围,以及使我可以使用这些东西的任何机制,我可以使用该机制使
company
navigatge_to_related
可用吗? (一旦我理解了这个机制,我就可以判断这是不是一个好主意。)

我在调试器里翻来覆去,试验调试器的检查命令,还有

binding
binding.caller
class.instance_methods
等,想弄明白事情的来龙去脉,但就是弄不明白它的。有帮助吗?

谢谢!

ruby scope
© www.soinside.com 2019 - 2024. All rights reserved.