1

我有以下控制器

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

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

4

1 回答 1

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 的工作原理。

但似乎你想要的是就地编辑。观看Railscasts。

于 2013-10-25T21:08:36.817 回答