我有以下控制器
class ProductController < ApplicationController
def show
id = params[:id]
@product = Product.find(id)
end
def update
render text:params
end
end
当我访问/product/1
时,我会显示包含产品1详细信息的页面,以及更新它们的方法。这就是我为观点所做的:
<%= form_for @product, url: {:action => :update} do |f| %>
<%= f.text_field "name" %></br>
<%= f.text_field "quantity" %></br>
<%= f.submit "Update" %>
<% end %>
当我点击更新时,它会呈现请求
{"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"sRzyQ0nP2ycWwgaS9eu5vHcID1b+hIl5Vho3KfX3XuE=", "product"=>{"name"=>"Test Name", "quantity"=>"2"}, "commit"=>"Update", "action"=>"update", "controller"=>"product", "id"=>"1"}
我会修改我的update
方法以保存新属性,并将用户重定向回show
页面。
这是我应该如何更新数据库对象吗?
答案 0 :(得分:0)
如果我理解你的问题,你必须:
def update
@product = Product.find(params[:id])
if @product.update_attributes(params[:product])
redirect_to @product, notice: 'Product was successfully updated.'
else
render action: 'show'
end
end
希望这有帮助!
修改强>
Rails方式不是show
操作来呈现表单,而是使用edit
操作。看一下脚手架:rails g scaffold foo
以了解Rails的工作原理。
但似乎你想要的是就地编辑。观看this Railscasts。