十一 29

重读AWDWR笔记

第9章

  • 使用局部模板。
render :partial => "cart", :object => @cart
render :partial => "cart_item", :collection => @cart.items
  • 辅助方法的一个示例。
# app/views/layout/stroe.rhtml
<%= hidden_div_if(@cart.items.empty?, :id => "cart") %>
  <%= render :partial => "cart", :object => @cart %>
<div>

# app/controllers/store_controller.rb
def hidden_div_if(condition, attributes = {})
  if condition
    attributes["style"] = "display: none;"
  end
  attrs = tag_options(attributes.stringify_keys)
  "
" end

第10章

  • validates_inclusion_of 方法验证某属性,在指定的列表中存在。防止别人构造不存在的支付方法逃避支付。
PAYMENT_TYPES = [
    ["Check", "check"],
    ["Credit Card", "cc"],
    ["Purchase Order", "po"]
  ]

validates_inclusion_of :pay_type, :in => PAYMENT_TYPES.map {|disp, value| value}
  • 一个向 Order 中填充 Cart 里面订购项目的过程。
# app/controller/stroe_controller.rb
def save_order
  @cart = find_cart
  @order = Order.new(params[:order])
  @order.add_line_items_from_cart(@cart)
  if @order.save
    session[:cart] = nil
    redirect_to_index("Thank you for your order")
  else
    render :action => :checkout
  end
end

# app/models/order.rb
def add_line_items_from_cart(cart)
  cart.items.each do |item|
    li = LineItem.from_cart_item(item)
    line_items << li
  end
end

# app/models/line_item.rb
def self.from_cart_item(cart_item)
  li = self.new
  li.product = cart_item.product
  li.quantity = cart_item.quantity
  li.total_price = cart_item.price
  li
end
  • 标签 : 
  • 原文链接 : http://railser.cn/blog/awdwr-3
  • 转载原创文章请注明 : 里克的自习室
  • 收藏到 : Google书签 新浪ViVi 365Key网摘 天极网摘 我摘 POCO网摘 博采网摘 YouNote网摘 和讯网摘 博拉网 igooi网摘 I2Key网摘 天下图摘 百特门网摘 Del.icio.us Yahoo书签 奇贴 QQ娱乐摘 添加到Digg! 添加到Facebook!
  • 发表留言