2013-10-25 43 views
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頁面。

這是我應該如何更新數據庫對象?

+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。

相關問題