ruby-on-rails – Rails帮助器模块中的实例变量在哪里存储?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails帮助器模块中的实例变量在哪里存储?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在关注的教程在子目录app / helpers下面的SessionsHelper模块被许多控制器和视图使用.但实际变量current_user在首次创建时存储在哪里?存储对象的类是什么?

当控制器首先调用current_user方法时,将创建current_user实例变量.当一个视图然后调用current_user方法时,current_user实例变量是如何存在的?在渲染视图期间是否自动设置为控制器对象?

module SessionsHelper
  ...
  def current_user
    @current_user ||= User.find_by_remember_token(cookies[:remember_token])
  end
  ...
end

解决方法

这个答案总体上讲述了控制器和视图之间如何传递实例变量: How are Rails instance variables passed to views?

所以基本上,如果@current_user由控制器设置,则该实例变量(以及所有其他变量)将从控制器上下文传递到视图上下文.如果没有由控制器设置,它将在视图第一次使用时设置.

有关更多信息,请参阅其他答案.这是一个很好的阅读.

Pasted from @mechanicalfish answer:

def view_assigns
  hash = {}
  variables  = instance_variables
  variables -= protected_instance_variables
  variables -= DEFAULT_PROTECTED_INSTANCE_VARIABLES
  variables.each { |name| hash[name[1..-1]] = instance_variable_get(name) }
  hash
end

传递给视图(github):

def view_context
  view_context_class.new(view_renderer,view_assigns,self)
end

在视图中设置它们(github):

def assign(new_assigns) # :nodoc:
  @_assigns = new_assigns.each { |key,value| instance_variable_set("@#{key}",value) }
end

猜你在找的Ruby相关文章