正确的方法来创建一个允许我更新对象的“显示”页面

时间:2013-10-25 20:14:31

标签: ruby-on-rails

我有以下控制器

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页面。

这是我应该如何更新数据库对象吗?

1 个答案:

答案 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。