练习题:在购物车的每个商品旁添加按钮,按一下减一个,数量为0删除该商品。先用普通方法再用Ajax支持。
1.自定义方法decrease, 为其设定路径routes.rb。 在resouurces :line_items的块中加put 'decrease', on: :member
2.在controller中定义这个方法。
- 注意⚠️:因为要用到render @cart渲染首页侧边栏,所以需要在action中声明实例变量@cart. 这里有前期模块CurrentCart中的方法set_cart,通过before_action,使用set_cart.
- 减到一本时要用destroy方法。
- respond_to 块中加 format.js
3. view模版中定义一个decrease.js.erb。用jquery: $('#cart').html("<%= j render(@cart) %>");
12 chapter
12.1 Capturing an Order
rails generate scaffold Order name address:text email pay_type:integer.
解释: 默认是string类型。
rails generate migration add_order_to_line_item order:references
解释:调用add_reference(table_name, ref_name, **options)方法。相当于add_reference(:line_items, :order, {:foreign_key=>true})
默认数据类型:integer. 可以改其他类型用 type: XXX
使用ActiveRecord::Enum类声明一个pay_type属性, Rails 帮助我们完成跟踪工作。
Declare an enum attribute where the values map to integers in the database, but can be queried by name.class Order < ApplicationRecord
enum pay_type: {
"Check" => 0,
"Credit Card" => 1,
"Purchase order" => 2,
}
end
打开数据库:
depot> sqlite -line db/development.sqlite3
关闭:
depot> .quit