Rails:难以集成新方法来减少项目数量

时间:2013-11-30 16:58:59

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

我正在尝试使用Ruby on Rails创建一个非常基本的库存控制系统,但是我很难添加新功能来补充'show','edit'和amp; 'destroy',当选择removeItem时,数据库中的项目(行)的数量减少1。

以下是我添加到routes.rb的代码:

match 'removeItem' => 'items#removeItem'

...我的index.html.erb

<td><%= link_to 'Remove Item', 'removeItem/:#{item}', method: :GET, data { confirm: 'Are you sure?' } %></td>

... items_controller.rb

def removeItem
@item = Item.find(params[:id])

respond to do |format|
 if @item.quantity >=1
   @item.quantity -= 1
     format.html { redirect to @item, notice: 'Item was successfully updated.' }
     format.json { head :no_content }
 else
     format.html { render action: "removeItem"}
     format.json { render json: @item.errors, status: :unprocessable_entity }
 end
 end

我收到的错误消息是“没有路由匹配[GET]”/ removeitem /:“。但是,我不确定如何解决问题或者为什么在分号后没有出现id号。

感谢。

1 个答案:

答案 0 :(得分:2)

对于路径,项目的ID丢失,使用http动词DELETE

是有意义的
delete 'removeItem/:id' => 'items#removeItem'

更新您的链接以使用DELETE动词

<%= link_to 'Remove Item', 'removeItem/:{item}', :method => :delete, data { confirm: 'Are you sure?' } %>

在控制器中:

@item.quantity -= 1

此行更新对象,但不更新数据库。您应该使用decrement!

respond to do |format|
  if @item.quantity >= 1 && @item.decrement!(:quantity)
    format.html { redirect to @item, notice: 'Item was successfully updated.' }
    format.json { head :no_content }
  else
    format.html { render action: "removeItem"}
    format.json { render json: @item.errors, status: :unprocessable_entity }
  end
end