大难不死,必有后福。最近经历了一点小车祸,还好,只是腿被撞了下。信春哥,得永生。
为了将货物保留到购物车,我们必须要用cookie or session。cookie将信息保留到浏览器,session服务器。rails里面的先将信息用cookie 收集,然后服务器根据cookie name找到对应的session id 。然后处理。session的存储可以由文件,数据库,其他。部署又是一节内容。这里用数据库。rails会保留一张session的表
首先,创建session表 rake db:session:create 然后迁移 rake db:migrate
接下来修改app/controller下面的application.rb文件
session :session_key => '_depot_session_id'
helper :all # include all helpers, all the time
# See ActionController::RequestForgeryProtection for details
# Uncomment the :secret if you're not using the cookie session store
protect_from_forgery :secret => 'ef0281b01f396605f500c00890ceb10f'
添加session :session_key => '_depot_session_id', 表示将session id存贮在name为_depot_session_id'。
protect_from_forgery #:secret => 'ef0281b01f396605f500c00890ceb10f' #去掉注释。
准备工作完成,下一步。
在app/controller/store_controller.rb 插入代码
private
def find_cart
session[:cart] ||= Cart.new
end
session[:cart] ||= Cart.new 表示 session[:cart] = session[:cart] || Cart.new 如果前面session[:cart]不存在,则创建Cart.new.在models下创建Cart.rb
class Cart
attr_reader :items
def initialize
@items = [] #创建一个数组
end
def add_product(product)
@items << product #add product to 数组
end
end
创建add_to_cart action。在app/controller/store_controller.rb
def add_to_cart
@cart = find_cart
product = Product.find(params[:id])
@cart.add_product(product)
end
params处理所有浏览器传过来的参数。params[:id]保存参数id。
然后写对应的add_to_cart.html.erb
<h1>Your Pragmatic Cart</h1>
<ul>
<%for item in @cart.items%>
<li><%=h item.title%><%=h item.description %></li>
<%end%>
</ul>
总结下整个流程。在store/index.html.erb 点击button,在controller寻找add_to_cart action。同时将product通过id标示传递给浏览器。然后创建session 。继而调用class Cart 创建实例,其实就是个数组。然后通过Product.find(params[:id])得到传递的product,最后@cart.add_product(product)。存储在数组里,最后通过页面显示
- 大小: 17.4 KB
- 大小: 25.6 KB
- 大小: 12.3 KB
分享到:
相关推荐
适用于 Ruby on Rails 的 Todolist 应用程序 现场演示 要求 吉特 Ruby 导轨 部署 克隆这个存储库: git clone https://github.com/mdluo/todos.git 然后进入目录: cd todos 安装包: bundle install 然后运行...
爆头Headshot 是一个 gem,它为 Ruby on Rails 应用程序提供了一种快速简便的方法,可以通过网络摄像头捕捉用户的照片,而无需接触 ActionScript 或 JavaScript 代码。 它通过在页面视图中嵌入 Flash 组件来访问用户...
饼干出轨 解码并可选择验证未加密的 Ruby on Rails cookie 的签名。 对此的替代实现要求您将 Rails 应用程序端的默认序列化格式更改为类似 JSON 的格式 - 这不是,而是使用用 javascript 编写的基本(哈希/数组/字符...
01:00PM Ruby on Rails: Why We Should Move On 60min 02:00PM Common Ruby Errors 45min 02:45PM Pair Programming vs Noise 45min 03:30PM Programming in the Boondocks of Seattle 30min 04:00PM Ruby vs. ...
最开始从Ruby On Rails框架里得到灵感。程序员可使用它来快速创建的Web应用程序。我们的首要目的是使你以一种预置的快速且不失灵活性的方式开展工作。 为什么是CakePHP? CakePHP有多个特点,这些特点让CakePHP成为...
这是一个Rails库,为应用程序提供数据库支持的用户会话。 这样可以确保可以从服务器使用户会话无效,并且可以轻松跟踪用户活动。 在会话中简单地设置用户ID的“传统”方式是不安全且不明智的。 如果仅执行以下示例...
最开始从Ruby On Rails框架里得到灵感。程序员可使用它来快速创建的Web应用程序。我们的首要目的是使你以一种预置的快速且不失灵活性的方式开展工作。 为什么是CakePHP? CakePHP有多个特点,这些特点让CakePHP成为...
plug_rails_cookie_session_store:与Rails兼容的插件会话存储
Redis Store为现代Ruby框架提供了全套存储( Cache , I18n , Session , HTTP Cache ),例如: Ruby on Rails , Sinatra , Rack , Rack :: Cache和I18n 。 它支持对象编组,超时,单个或多个节点以及名称空间...
Tempus时间追踪器 该项目是一个时间跟踪器,您可以在其中跟踪七个类别中的一个或总计所花费的时间。 使用的应用程序的所有信息和验证,并使用REDUX存储在应用程序中。 这是Microverse技术课程的最后一个顶峰项目。...
CakePHP是一个用PHP编写的开源Web应用框架,不过其模型是用Ruby on Rails设计的。作为PHP世界的Rails,CakePHP采纳了RoR的许多优秀特性,成熟度较高。在cakephp.org站点的Sites in the wild页面可以看到当前使用...
为了这个目的,我们博取众框架之长处集中到Laravel中,这些框架甚至是基于Ruby on Rails、ASP.NET MVC、和Sinatra等开发语言或工具的。Laravel是易于理解并且强大的,它提供了强大的工具用以开发大型、健壮的应用。...
CakePHP是一个用PHP编写的开源Web应用框架,不过其模型是用Ruby on Rails设计的。作为PHP世界的Rails,CakePHP采纳了RoR的许多优秀特性,成熟度较高。在cakephp.org站点的Sites in the wild页面可以看到当前使用...
CakePHP是一个用PHP编写的开源Web应用框架,不过其模型是用Ruby on Rails设计的。作为PHP世界的Rails,CakePHP采纳了RoR的许多优秀特性,成熟度较高。在cakephp.org站点的Sites in the wild页面可以看到当前使用...
CakePHP是一个用PHP编写的开源Web应用框架,不过其模型是用Ruby on Rails设计的。作为PHP世界的Rails,CakePHP采纳了RoR的许多优秀特性,成熟度较高。在cakephp.org站点的Sites in the wild页面可以看到当前使用...
Ruby on Rails混淆业务层),经过多年发展和众多用户的使用及其完善,JF已经发展成为一套国人自主的、面向对象的、基于构件(基于组件)的、成熟的优秀轻量开发框架。 JF与国内其他快速开发工具相比:JF是严格坚持...
Jdon Framework(简称JF)是一套适合开发中小型J2EE/...Ruby on Rails忽视了业务层服务), JF与国内其他快速开发工具相比:JF是严格坚持分层架构(表现层、业务层和持久层)下的快速开发。(注:象Deplhi/VB那样减少层
Chrome扩展程序可解码Ruby on Rails会话cookie。 通过此扩展,您可以轻松地解码存储在cookie中的Rails会话的内容。 Rails的会话cookie存储将会话保存在序列化的base64编码的cookie中。 它还支持加密的会话cookie...