我不理解以下应用程序中session
和params
之间的区别。
用户提交新的电影表单。相关控制器如何访问电影的标题?
session['title']
session.title
params['title']
params.title
- 以上所有
醇>
基于Difference between session and params in Controller class的StackOverflow答案:
params
位于表单的网址或帖子正文中,因此只要查询完成就会消失。会话在多个请求之间保持不变(信息通常存储在cookie中,但这取决于您的配置)。
简短:
- params:仅一个请求(创建一个对象,访问一个特定页面)
- session:要保留的信息(购物车,已登录用户..)
我在测验中选择了(1)session ['title']
并得到了错误的答案。我选择了(1)因为我认为它涉及访问必须持久的信息。
我是否误解了这个问题,也许这只是“只有一个请求”,所以答案应该是(3)params['title']
?
答案 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 - 将数据从用户传输到服务器,会话不用于传输数据,而是用于存储它。