Ruby on rails Ruby_on_rails会话和语法

Ruby on rails Ruby_on_rails会话和语法,ruby-on-rails,session,Ruby On Rails,Session,我不熟悉rails。查看其他人编写的代码(用于数据过滤器)。试图弄清楚以下内容的确切含义: session[:filters]-只是一个包含会话中所选筛选器的哈希?是:过滤会话选项还是在代码中的某个地方定义的 会话[:过滤器][控制器]-与1相同,但是否指定控制器 会话[:过滤器][控制器][会话[:用户]]- session[:filters][controller]。删除(session[:user])- 基本上是rails使用的Hash对象,将数据作为cookie存储在客户端,作为Hash

我不熟悉rails。查看其他人编写的代码(用于数据过滤器)。试图弄清楚以下内容的确切含义:

  • session[:filters]
    -只是一个包含会话中所选筛选器的哈希?是:过滤会话选项还是在代码中的某个地方定义的

  • 会话[:过滤器][控制器]
    -与1相同,但是否指定控制器

  • 会话[:过滤器][控制器][会话[:用户]]
    -

  • session[:filters][controller]。删除(session[:user])
    -

  • 基本上是rails使用的
    Hash
    对象,将数据作为cookie存储在客户端,作为
    Hash
    ,它使用
    存储信息(有关哈希的更多信息)

    在您的代码中,
    :filters
    只是
    会话
    散列的
    (您可以从
    中看出),它包含有关筛选器的信息。因此,
    :过滤器
    没有在其他地方定义,尽管它应该在其他地方设置,例如:

    session[:filters] = some_filter
    
    在第二行中,您会看到
    [:filters][controller]
    ,这意味着
    :filters
    也是一个
    散列
    ,因此它还包含键,其中一个键是控制器的名称(同样,我认为这是因为名称,但我可能是错的)。这里的
    控制器
    只是一个变量(注意没有
    ),它包含
    :过滤器
    散列的
    键的名称

    所以,如果您继续,现在就可以知道无论
    控制器
    值是什么,都是另一个
    散列
    。在第3行中,
    会话[:user]
    是该散列的键(其中,
    :user
    会话
    散列的另一个键,我假设该散列包含用户名或id)

    最后,在第4行
    delete
    中,从散列中删除键
    会话[:user]
    (即从cookie中删除)

    考虑这个例子:

    # create session hash with :user key
    session = { :user => "user79" }
    #=> {:user=>"user79"}
    
    # create another hash with session[:user] key and any value
    hash1 = { session[:user] => "my value" }
    #=> {"user79"=>"my value"}
    
    # create controller variable with a value
    controller = "users"
    #=> "users"
    
    # create another hash with controller key and hash1 as a value
    hash2 = { controller => hash1 }
    #=> {"users"=>{"user79"=>"my value"}}
    
    # add :filters key to session with hash2 as a value
    session[:filters] = hash2
    
    # Retrieve the value from the session hash
    session[:filters][controller][session[:user]]
    #=> "my value"
    
    # Delete session[:user] key from the session hash
    session[:filters][controller].delete(session[:user])
    #=> "my value" (delete returns the deleted value)
    
    # Retrieve the value from the session hash
    session[:filters][controller][session[:user]]
    #=> nil
    
    session[:filters][controller]
    #=> {}  (returns empty hash since we deleted the only key it had)
    

    @user7934228很高兴为您提供帮助!如果您发现答案完整,您可以接受它(单击勾号)。:)