0

在学习 Rails 时,我在 Sam Ruby 的书中找到了这个例子:

应用程序/控制器/line_items_controller.rb

def create
        @cart = current_cart
        product = Product.find(params[:product_id])
        @line_item = @cart.line_items.build
        @line_item.product = product

        respond_to do |format|
          if @line_item.save
            # this following line is strange for me 
            format.html { redirect_to(@line_item.cart, :notice => 'Line item was successfully created.') }
            format.xml  { render :xml => @line_item, :status => :created, :location => @line_item }
          else
            format.html { render :action => "new" }
            format.xml  { render :xml => @line_item.errors,
              :status => :unprocessable_entity }
          end
        end
  end

为什么不redirect_to(@line_item.cart,...)只是替换为的部分redirect_to(@cart,...)

事实上,@cart 是一个可访问的实例变量。

@line_item在这个例子中我们是否被迫使用来检索购物车?

4

2 回答 2

1

此示例中是否涉及某种嵌套路由?你可以简单地做一个redirect_to @cart例子应该仍然有效。

试试看。但它应该根据我的理解工作。也许作者希望在他重定向到的购物车中更具表现力。

于 2012-06-26T13:09:55.233 回答
1

在这些时候,我们必须假设作者试图传达,

“保存此 line_item 后,转到具有此 line_item 的购物车” => 可读性。

无论如何,一个好的代码应该提供两件事,

  1. 可读性。
  2. 未来修改的空间。

我从经验和现实中意识到它们的必要性。(不是书本)

得到正确的输出后可以考虑优化。

如我错了请纠正我。

于 2012-06-26T14:14:07.850 回答