加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 21:40:58 所属栏目:百科 来源:网络整理
导读:我正在关注的教程在子目录app / helpers下面的SessionsHelper模块被许多控制器和视图使用.但实际变量current_user在首次创建时存储在哪里?存储对象的类是什么? 当控制器首先调用current_user方法时,将创建current_user实例变量.当一个视图然后调用current_
我正在关注的教程在子目录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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读