我正在尝试使用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号。
感谢。
答案 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