表格数据是通过会话还是参数传递的?

时间:2013-07-31 18:56:33

标签: ruby-on-rails session-variables

我不理解以下应用程序中sessionparams之间的区别。

  

用户提交新的电影表单。相关控制器如何访问电影的标题?

     
      
  1. session['title']
  2.   
  3. session.title
  4.   
  5. params['title']
  6.   
  7. params.title
  8.   
  9. 以上所有
  10.   

基于Difference between session and params in Controller class的StackOverflow答案:

  

params位于表单的网址或帖子正文中,因此只要查询完成就会消失。

     

会话在多个请求之间保持不变(信息通常存储在cookie中,但这取决于您的配置)。

     

简短:

     
      
  • params:仅一个请求(创建一个对象,访问一个特定页面)
  •   
  • session:要保留的信息(购物车,已登录用户..)
  •   

我在测验中选择了(1)session ['title'] 并得到了错误的答案。我选择了(1)因为我认为它涉及访问必须持久的信息。

我是否误解了这个问题,也许这只是“只有一个请求”,所以答案应该是(3)params['title']

2 个答案:

答案 0 :(得分:4)

要尝试在此测验的上下文中回答您的问题,而不仅仅是在代码的上下文中,请考虑它所说的位置:

  params生活在一个表单的url或post体中,所以它消失了   一旦查询完成。

现在考虑问题本身说:

  

用户提交新电影表单。关联的控制器如何?   访问电影的标题?

所以问题是用户通过填写​​表格然后post到服务器进行交互。这正是笔记中提到的“表单的主体”

所以正确的答案是 3)params['title']

现在,一旦访问了这些数据,就可以将它放入会话中,但这是由开发人员做或决定的,而这实际上并不属于这里所讨论的范围。

您还知道,在此问题的上下文中,会话不是使用的,因为您的问题仅涉及单个请求:发送表单。如果您的问题涉及从表单发送的数据,这些数据必须持续多次请求(例如多页表单),那么会话可能会发挥作用。

答案 1 :(得分:0)

在访问数据之前,您需要将其放入。在默认的rails生成表单中,所有数据都以params的一个请求发送。如果您的表单指向User#create action并且输入了'name',那么您将在User#create action中使用params ['name']。

会话是另一回事。在标准生成的rails scaffold中很难找到会话。您可以将会话作为哈希访问。 session ['name']将在请求之间存储名称。 Read more

因此,为一个请求生成params - 将数据从用户传输到服务器,会话不用于传输数据,而是用于存储它。