关键词:
【中文标题】Rails 会话存储模型对象【英文标题】:Rails session store model object 【发布时间】:2016-07-26 07:22:11 【问题描述】:我使用 session 来存储我的购物车对象
在我的购物车模型中
def initialize
@items = Array.new
end
def clean
@items = Array.new
end
我想使用 session 来存储整个购物车对象,所以我可以使用上面的方法
喜欢这个
@cart = session[:cart] ||= Cart.new
但我的@cart 输出很奇怪
第一次运行输出
<%= @cart %>
#<Cart:0x007efc844d3af0>
<% @cart.clean %>
true
一切正常,但第二次输出对象的内容
<%= @cart %>
"items"=>[]
<% @cart.clean %>
undefined method `clean'
会话可以存储整个对象吗?
还是我做错了什么?
谢谢。
编辑:
<% session[:cart] = Cart.new %>
<%= session[:cart] %>
#<Cart:0x007efc868be0a0>
<% session[:cart] = session[:cart] ||= Cart.new %>
<%= session[:cart] %>
#<Cart:0x007efc868be0a0> #Because session[:cart] does not exist
<% session[:cart] = session[:cart] ||= Cart.new %>
<%= session[:cart] %>
"items"=>[] #Session does not store the cart object but store the cart object's content
编辑 2:
<% @cart = session[:cart] ||= Cart.new %>
<%= @cart %> #session[:cart] is nil so print Cart.new
<br>
<% session[:cart] = Cart.new %>
<% @cart = session[:cart] ||= Cart.new %>
<%= @cart %> #session[:cart] isn't nil so print session[:cart]
我得到两个输出都是 Cart 对象
当我刷新页面并运行相同的代码时
<% @cart = session[:cart] ||= Cart.new %>
@cart 应该是 session[:cart] 因为 session 不是 nil 并且 session[:cart] 应该是 Cart 对象但它输出 ""items"=>[]"
编辑 3:
第一次:
<%= session[:cart] %>
-> nil
<% session[:cart] = Cart.new %>
<%= session[:cart] %>
-> <Cart:0x00000007c112c0>
第二次:
<%= session[:cart] %>
-> "items"=>[] #Why it isn't a Cart object after I refresh?
<% session[:cart] = Cart.new %>
<%= session[:cart] %>
-> <Cart:0x00000007c112c0>
【问题讨论】:
会话可以存储购物车对象吗?我想让session[:cart].clean
和@cart.clean
都可以工作,谢谢。
在会话中存储对象不是一个好主意,请参阅***.com/questions/1095714/…。这个线程讨论了它的陷阱。如果您坚持在会话中存储对象,则必须通过将参数传递给 Cart.new(session[:cart]) 或类似的东西来重建它,因为会话会序列化对象并存储它。希望这会有所帮助。
@Shishir 感谢您的帮助,我不想将购物车项目存储到数据库中,所以我将购物车对象放到会话中,购物车对象是一个小数组来存储产品 id 和数量。我不明白为什么我刷新页面我得到不同的会话输出。请参阅编辑 2,谢谢。
第一次渲染,它在服务器端,它们仍然是 ruby 对象。刷新时,会话从客户端获取并反序列化。请参阅此***.com/questions/3804209/… 了解更多信息。
@Shishir 非常感谢!我完全明白。那么如何在没有数据库表的情况下存储 Cart 对象呢?
【参考方案1】:
始终使用购物车对象。从会话初始化它,执行操作,最后将它序列化回会话。
class Cart
def initialize(params=)
@items = params[:items] || []
end
end
controller:
@cart = Cart.new(session[:cart])
//do operations on cart
session[:cart] = @cart
【讨论】:
会话存储在 Rails 中的啥位置?
】会话存储在Rails中的啥位置?【英文标题】:WhereistheSessionStoredinRails?会话存储在Rails中的什么位置?【发布时间】:2015-10-0104:05:43【问题描述】:在Rails中,我为用户身份验证实现了以下代码(确认是正确的)。但是,我想确... 查看详情
rails在会话中存储密码
】rails在会话中存储密码【英文标题】:railsstoringpasswordinasession【发布时间】:2011-11-1709:26:16【问题描述】:我有一个可以进行webapi调用的rails应用程序,rails应用程序本身没有任何数据库或用户存储。每个api调用都需要为每个请... 查看详情
Rails:如何在会话中存储数据?
】Rails:如何在会话中存储数据?【英文标题】:Rails:Howtostoredatainsession?【发布时间】:2014-03-3016:21:45【问题描述】:我正在Rails中制作一个写作考试练习网络应用程序。问题是如果用户的答案被提交到互联网上,他们很容易被ET... 查看详情
在 Rails 中存储持久会话数据而不影响正常会话过期
】在Rails中存储持久会话数据而不影响正常会话过期【英文标题】:StoringpersistentsessiondatainRailswithoutaffectingnormalsessionexpiration【发布时间】:2010-02-1404:37:13【问题描述】:我想为每个浏览器(用户设置)存储一些持久数据,并且... 查看详情
Rails 最好的安全会话存储?
】Rails最好的安全会话存储?【英文标题】:Railsbestsessionstorageforsecurity?【发布时间】:2014-06-1417:21:12【问题描述】:我正在尝试设置我的会话以在服务器上运行,但不知道如何去做。我已经搜索了一段时间,但找不到可以帮助... 查看详情
在 Rails api 应用程序中存储会话
】在Railsapi应用程序中存储会话【英文标题】:storingsessioninrailsapiapplication【发布时间】:2016-06-1612:23:15【问题描述】:我有一个仅限Railsapi的应用程序[config.api_only=true],我在其中通过以下几行启用cookie:在application.rb中:config.mi... 查看详情
Ruby on Rails 中的会话如何工作?
】RubyonRails中的会话如何工作?【英文标题】:HowdosessionsworkinRubyonRails?【发布时间】:2015-08-2320:03:55【问题描述】:我想知道会话在RubyonRails中是如何工作的。我现在可以使用session[:user_id]=@user.id保存会话并使用session[:user_id]检索... 查看详情
Rails ActiveRecord 会话存储在 HTML5 SessionStorage 中而不是 Cookie
】RailsActiveRecord会话存储在HTML5SessionStorage中而不是Cookie【英文标题】:RailsActiveRecordSessionStoreinHTML5SessionStorageInsteadofCookie【发布时间】:2013-08-2110:10:43【问题描述】:我的应用程序要求用户在浏览器的不同选项卡中登录不同的帐... 查看详情
销毁管理会话导致 http 获取请求 rails 4
】销毁管理会话导致http获取请求rails4【英文标题】:destroyadminsessionresultinginhttpgetrequestrails4【发布时间】:2015-02-0117:13:29【问题描述】:我的Rails4应用程序有一个用户和管理员模型。我已经为通过rails_admingem创建的Admin模型实现... 查看详情
Rails:回溯对象所属的模型
】Rails:回溯对象所属的模型【英文标题】:Rails:Referringbacktomodeltheobjectbelongsto【发布时间】:2011-01-0203:00:05【问题描述】:这可能是一个愚蠢的问题,但我似乎找不到一个好的答案。我想知道引用对象所属模型的最佳方法。例... 查看详情
Rails、Cucumber、Capybara:会话不持久
】Rails、Cucumber、Capybara:会话不持久【英文标题】:Rails,Cucumber,Capybara:sessionisnotpersisted【发布时间】:2011-07-0521:48:20【问题描述】:我正在尝试为依赖于某些会话存储数据的功能编写测试,我的场景如下所示:Scenario:CreateofferGive... 查看详情
在 Rails 和 Spring MVC 之间共享会话
】在Rails和SpringMVC之间共享会话【英文标题】:SharingthesessionbetweenRailsandSpringMVC【发布时间】:2012-03-2718:13:38【问题描述】:在Rails中,会话存储在cookie中并签名以防止伪造。我正在寻找有关以某种方式让SpringMVC加载Railscookie(以... 查看详情
Rails 没有在 ajax 帖子上重新加载会话
】Rails没有在ajax帖子上重新加载会话【英文标题】:Railsnotreloadingsessiononajaxpost【发布时间】:2011-07-0420:18:05【问题描述】:我在使用jQuery的Rails和ajax方面遇到了一个非常奇怪的问题(尽管我认为这不是jQuery特有的)。我的Rails应... 查看详情
会话和 cookie 在 Rails 中是如何工作的?
】会话和cookie在Rails中是如何工作的?【英文标题】:HowdosessionsandcookiesworkinRails?【发布时间】:2015-05-2419:54:39【问题描述】:我一直在使用Devise处理我的Rails应用程序的身份验证,但从未真正了解它是如何工作的。因为Devise还使... 查看详情
在 Rails 中创建对象及其所有关联模型的副本
】在Rails中创建对象及其所有关联模型的副本【英文标题】:Createacopyofanobjectandallitsassociatedmodelsinrails【发布时间】:2013-07-2319:33:21【问题描述】:我正在努力在rails及其所有相关的关联模型中创建对象的副本。但我无法找到解决... 查看详情
如何在 Rails 中缓存模型对象?
】如何在Rails中缓存模型对象?【英文标题】:HowcanIcacheModelobjectsinRails?【发布时间】:2011-04-2102:26:55【问题描述】:有没有一种我可以在Rails中使用的技术,这样每当对Model对象执行简单的“查找”时,首先在memcached中搜索结果... 查看详情
Rails 查询/范围:根据连接模型的属性排除对象
】Rails查询/范围:根据连接模型的属性排除对象【英文标题】:Railsquery/scope:excludeobjectsaccordingtoattributeofjoinedmodel【发布时间】:2012-01-1513:58:01【问题描述】:我的模型如下所示:classTicket<ActiveRecord::Basehas_and_belongs_to_many:tagsendc... 查看详情
Grails:在用户会话期间存储数据的最佳方法[关闭]
】Grails:在用户会话期间存储数据的最佳方法[关闭]【英文标题】:Grails:Bestapproachforstoringdataforthedurationoftheuserssession[closed]【发布时间】:2014-01-2504:27:31【问题描述】:以下哪种方法被认为是在用户会话期间将数据存储在grails中... 查看详情