Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 课程,了解Rails如何了解要获取的模型_Ruby On Rails_Ruby_Session - Fatal编程技术网

Ruby on rails 课程,了解Rails如何了解要获取的模型

Ruby on rails 课程,了解Rails如何了解要获取的模型,ruby-on-rails,ruby,session,Ruby On Rails,Ruby,Session,我已在我的companys\u控制器中的方法中分配了会话[:active\u company]=@company 在我的application.html.erb中,我有一行: <li><%= link_to "Company", session[:active_company], :method => :get %></li> :获取%> 单击此按钮时,Rails知道如何使用companys\u controllershow方法 我是Rails的新手

我已在我的
companys\u控制器中的方法中分配了
会话[:active\u company]=@company

在我的
application.html.erb
中,我有一行:

<li><%= link_to "Company", session[:active_company], :method => :get %></li>
  • :获取%>
  • 单击此按钮时,Rails知道如何使用
    companys\u controller
    show方法

    我是Rails的新手,这个项目是我第一次自己添加会话变量,所以如果有人能帮忙,我有几个问题:

  • Rails如何知道如何使用公司控制器?它是否查看会话中存储的内容,并知道它是一个@company,因此转到该控制器的get方法
  • 添加会话数据时是否存在陷阱或安全问题?有没有更好的方法来建立活跃的公司
  • 与其在会话中存储完整的公司记录,不如只存储id,然后创建一个助手方法来检索该公司记录?这是否会降低应用程序的速度,因为它总是要执行搜索
  • 感谢您观看

    1)Rails非常传统。它知道session[:active_company]对象是company类型,按照惯例,该模型具有类似于
    /companys/{id of object}
    的路由。如果您传入一个不是活动记录模型的对象,您将得到一个错误,并看到Rails正试图在该对象上调用
    Model\u name
    。是的,你的假设是正确的

    2) 我认为这一点都不安全。只要您的应用程序支持SSL,我就看不到有人进行会话劫持或其他任何操作。在一个类似的应用程序中,我只是对每个请求进行了查找。我在会话中存储的唯一内容是用户的id。下面是一个关于会话和安全性的指南

    3) 只要您的数据库被正确地索引,每次进行查找都不会有什么坏处。大多数数据库都有内部缓存机制来加速类似的重复查找。

    3)您应该只在
    会话
    哈希中存储id。避免在
    会话中存储整个对象。使用检索公司记录

      @active_company = Company.find( session[:active_company_id] )
    
    2) 使用会话是跟踪特定于会话的内容的好方法。但是,将整个对象存储在会话中可能会使对象在cookie中可用。(不过我对此不是很确定)

    1) Rails使用
    link_to
    中的第二个参数(神奇的好)猜测您的意图。当您传递公司对象的
    会话[:active_company]
    时,它将设置公司控制器的路径以及对象的id。结果显示路径为
    /companys/:id

    如果将link_指定给对象数组,则不会传入任何id,从而导致
    /companys
    。默认情况下,
    link\u to
    被视为动词GET

    简而言之,它应该是这样的:


    谢谢您的回答。我喜欢铁路