使用Rails理解敏捷Web开发中的魔术代码(第4版)

时间:2013-02-21 03:43:48

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我不理解“line_items_controller.rb”中的第5行: 我注意到Rails 3.1的代码没有这样的行,而在Rails 3.2的代码中它有这样的行。 从Java世界来看,很难说这里使用了什么样的魔法红宝石:( 我被困在了解Rails文档。

e.g。 button_to有signiture button_to(name,options = {},html_options = {})

但是在代码中,你可以添加像

这样的参数
<%= button_to 'Empty cart', @cart, :method => :delete, :confirm => 'Are you sure?' %>

我想@cart不应该在那里......

def create
    @cart = current_cart #this is a function method
    product = Product.find(params[:product_id])
    @line_item = @cart.add_product(product.id)
    @line_item.product = product

    respond_to do |format|
      if @line_item.save
        format.html { redirect_to @line_item.cart }
        format.json { render json: @line_item,
          status: :created, location: @line_item }
      else
        format.html { render action: "new" }
        format.json { render json: @line_item.errors,
          status: :unprocessable_entity }
      end
    end
end

此处项目的完整源代码: https://github.com/ilovejs/depot_i/blob/master/app/controllers/line_items_controller.rb

2 个答案:

答案 0 :(得分:1)

似乎@cart.add_product(product.id)如果要向@cart添加产品,@line_item.product = product似乎也在做同样的事情

在没有看到Cart模型代码的情况下很难说清楚,但我认为

删除@line_item.product = product行也应该没有问题

答案 1 :(得分:1)

Replaec:

@line_item = @cart.add_product(product.id)
@line_item.product = product

@cart.add_product(product.id)

然后

@line_item

下面的参考文献可能应该是@cart。