论坛首页 Ruby版 rails

关于web开发敏捷之道的depot例子的问题

浏览 1541 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2007-08-26 关键字: web开发敏捷之道
我今天在照着《web开发敏捷之道2e》的depot的任务D:Ajax初体验中,有些代码有错误,而且那个添加商品高亮显示的效果一直弄不出来,完全按照书上的代码了。
P119
<%= form_remote_tag :url => { :action => :add_to_cart, :id => product } %>
  <%= submit_tag "Add to Cart" %>
  <% end %>


应为:
<%= form_remote_tag :url => { :action => :add_to_cart, :id => product } %>
  <%= submit_tag "Add to Cart" %>
  <%= end_form_tag %>


在显示新加入购物车高亮的效果时有时会正常,有时错误,提示找不到那个标识符,如下图

好像是第一次添加商品时就会出错,之后再次添加同一个商品时就不会出错。

把rjs中的:current_item改为:cart就是直接高亮显示整个购物车就不会出错。

page[:cart].visual_effect :highlight,
                                   :startcolor => "#88ff88" ,
                                   :endcolor => "#114411"


请问一下大家在实验这个例子有没有遇到这种情况,为什么会这样?
  • 61ea14a0-1285-4056-8344-988f6d3d0221-thumb
  • 描述: 出错页面
  • 大小: 7.5 KB
  • E1048ee7-bf2b-4137-8e25-38c3780e5d44-thumb
  • 描述: 出错页面2
  • 大小: 17.3 KB
   
时间:2007-08-26
错误发现了,原来是在depot_r/app/models/cart.rb中

def add_product(product)
  current_item = @items.find {|item| item.product == product}
  if current_item
    current_item.increment_quantity
  else
    current_item = CartItem.new(product)
    @items << current_item
  end
  current_item
end


我把这个方法的else后面那两句简写成一句

@items << CartItem.new(product)


导致在第一次添加商品时导致product 对象没有被保存current_item中,所以在第一次添加时会出现错误。
   
0 请登录后投票
时间:2007-08-27
那本书上有好多错误的说
def add_to_cart
begin
product=Product.find(params[:id])
书上这里是这样的
@product=Product.find(params[:id])
rescue ActiveRecord::RecordNotFound
logger.error("Attempt to access invalid product #{params[:id]}")
redirect_to_index("Invalid product")
else
@cart =find_cart
#@cart.add_product(product)
@current_item=@cart.add_product(product)
redirect_to_index unless request.xhr?
end
end
   
0 请登录后投票
时间:2007-08-27
178518 写道
那本书上有好多错误的说
def add_to_cart
begin
product=Product.find(params[:id])
书上这里是这样的
@product=Product.find(params[:id])
rescue ActiveRecord::RecordNotFound
logger.error("Attempt to access invalid product #{params[:id]}")
redirect_to_index("Invalid product")
else
@cart =find_cart
#@cart.add_product(product)
@current_item=@cart.add_product(product)
redirect_to_index unless request.xhr?
end
end


你说的这个在这个贴里有说:

http://www.javaeye.com/topic/102909
   
0 请登录后投票
时间:2007-08-31
该书在网上下载的英文pdf就是照楼主的写法。
但查阅rails api的文档,发现还是应该采用中文书上的写法才正确,否则每次加入到购物车的都是第1条产品,得不到product的id号。
我用的rails是1.2.3的版本,正确写法如下:
<% form_remote_tag :url => {:action => :add_to_cart,:id => product} do %>
<%= submit_tag '加入购物车' %>
<% end %>
   
0 请登录后投票
时间:2007-09-02
第2个高亮显示的问题,
因为:@cart_items << CartItem.new(product)一句,没有得到current_item,还是应该照原书的写。
   
0 请登录后投票
时间:2007-09-07
正在学习,发现书中119页代码
<%= form_remote_tag :url => {:action => :add_to_cart,:id => product} do %>
<%= submit_tag "Add to cart" %>
<% end %>
多了一个“=”号,正确写法
<% form_remote_tag :url => {:action => :add_to_cart,:id => product} do %>
<%= submit_tag "Add to cart" %>
<% end %>
   
0 请登录后投票
时间:2007-09-09
呵呵~~英文版的是有这个问题,我调试了半天,后来在add_product方法中增加一个current_item返回,OK了。。。
   
0 请登录后投票
论坛首页 Ruby版 rails

跳转论坛:
JavaEye推荐