创建新路由Rails 4

时间:2015-05-16 21:31:40

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 routes

我有一个问题: 我想减少line_item的产品数量 我使用button_to来减少数量(购物车将由AJAX更新) 顺便说一下,我'我无法在line_items的控制器中创建新操作。 我创造了新动作" less"我添加了新路线

resources :line_items do
    post :less, on: :member     
end
在routes.rb文件中

。但它无济于事。 我有这个错误:

的ActionController :: UrlGenerationError

没有路由匹配{:action =>" less",:controller =>" line_items",:product_id => 7}缺少必需的密钥:[:id]

你能帮帮我吗?谢谢所有:))

这是我的代码。

查看:

<%= button_to' - ',less_line_item_path(product_id:line_item.product_id),remote:true%>

在line_items控制器中:

...
def less
    product = Product.find(params[:product_id])
    @line_item = @cart.less_items(product.id)
    respond_to do |format|
  if @line_item.save
    format.html { redirect_to store_url}
            #a respond_to passiamo il blocco con la @current_item
            #si passa un blocco perchè è definito cosi il metodo
            format.js   { @current_item = @line_item} 
    format.json { render :show, status: :created, location: @line_item }
  else
    format.html { render :new }
    format.json { render json: @line_item.errors, status: :unprocessable_entity }
  end
end
end

...

购物车型号:

def less_items(product_id)  
    current_item = line_items.find_by(product_id: product_id)
    if current_item && current_item > 1
        current_item.quantity -= 1
    else
        #don't do nothing
    end
    current_item
end

1 个答案:

答案 0 :(得分:1)

问题是您没有:id字段。

将button_to更改为...

<%= button_to '-', less_line_item_path(line_item, product_id: line_item.product_id), remote: true %>

这将传递:id参数中的line_item id,路由将很高兴。