Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么rails找不到由助手创建的路由?_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 为什么rails找不到由助手创建的路由?

Ruby on rails 为什么rails找不到由助手创建的路由?,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我在rails 4中创建了一个: resources :line_items do post 'decrement', on: :member end 并在line_items controller中为其提供了匹配方法: def decrement @cart = current_cart @line_item = @cart.line_items.find_by_id(params[:id]) @line_item.decrement_quantity

我在rails 4中创建了一个:

resources :line_items do
    post 'decrement', on: :member
end
并在line_items controller中为其提供了匹配方法:

def decrement
    @cart = current_cart

    @line_item = @cart.line_items.find_by_id(params[:id])
    @line_item.decrement_quantity

    respond_to do |format|
      if @line_item.save
        format.html { redirect_to shop_path, notice: 'Line item was successfully updated.' }
        format.js {@current_item = @line_item}
        format.json { head :ok }
      else
        format.html { render action: "edit" }
        format.js {@current_item = @line_item}
        format.json { render json: @line_item.errors, status: :unprocessable_entity }
      end
    end
  end
但当我试着做一个按钮时:

<%= button_to 'X', decrement_line_item_path(item)  %>
有什么好处?

resources :line_items do
    post 'decrement', on: :member
end
根据
CONTROLLER='line\u items'rake routes
,以下是输出

decrement_line_item POST   /line_items/:id/decrement(.:format) line_items#decrement
         line_items GET    /line_items(.:format)               line_items#index
                    POST   /line_items(.:format)               line_items#create
      new_line_item GET    /line_items/new(.:format)           line_items#new
     edit_line_item GET    /line_items/:id/edit(.:format)      line_items#edit
          line_item GET    /line_items/:id(.:format)           line_items#show
                    PUT    /line_items/:id(.:format)           line_items#update
                    DELETE /line_items/:id(.:format)           line_items#destroy
因此,在html按钮部分,需要添加
POST
方法

<%= button_to 'X', decrement_line_item_path(item), method: :post  %>

您的错误消息是:

No route matches [POST] "/carts/25"
但我希望路线是:
/line\u items/25/减量
,而不是
/carts/25

您的
行\u项目
路线是否已嵌套在
购物车
下?如果是这样,可以按如下方式取消启动递减操作:

# in config/routes.rb
resources :carts do
  resources :line_items
end

resources :line_items, only: [] do
  post 'decrement', on: :member
end

你能为这个控制器粘贴
rake routes
的输出吗?但据我所知,
按钮\u to
默认采用
post
方法!啊。。。对那是我想不出来的。那一定是路线上的问题。太好了,今天晚些时候我会试一试。该按钮被放入
:show
视图的
购物车
控制器中(我可能应该在我的问题中提到这一点)。这是否告诉您还有什么问题,或者您的答案是否仍然有效?如果解决方案不起作用,那么如果您发布运行的输出:
rake-routes | grep-decrement
,那么我们将对其进行另一次检查(也就是说,发布过滤后的rake-routes的输出,以仅包含包含带有decrement一词的行)
# in config/routes.rb
resources :carts do
  resources :line_items
end

resources :line_items, only: [] do
  post 'decrement', on: :member
end