2012-11-20 22 views
0

繼Railscasts樂於助人的教程#38 http://railscasts.com/episodes/38-multibutton-form我成立了一個「預覽」按鈕爲我的「新建」 /「創建」控制器動作。多按鍵Rails的工作形式新而不是編輯

但是,當我使用「編輯」/「更新」相同的方法似乎有問題。

我似乎無法讓我的表單繼續存在。

這裏是我的控制器是什麼樣子:

def update 
    stylesheets << 'feature' 

    @feature = Feature.find(params[:id]) 

    case params[:submit] 
     when "Preview" 
      render :action => "edit" 
     return 

     when "Update" 
      respond_to do |format| 
       if @feature.update_attributes(params[:feature]) 
        flash[:notice] = 'Feature was successfully updated.' 
        format.html { redirect_to(features_path) } 
        format.xml { head :ok } 
       else 
        format.html { render :action => "edit" } 
        format.xml { render :xml => @feature.errors, :status => :unprocessable_entity } 
       end 
      end 
     return 
    end 

end 

當我打的預覽按鈕,我回到預期的編輯畫面,但我的編輯不會持續。有小費嗎?好奇,因爲這對預覽新對象工作正常。

+0

沒有一個難看的樣子,嘗試'render:action =>「edit」並返回'。如果不是這樣,'when'後面的值需要對應於你給出按鈕的名字,並且會出現在params數組中 - 檢查'logs/development.log'並確保你的名字得到的是正確的。 –

回答

2

這裏發生的事情是,你沒有實際應用的用戶呈現你的看法之前,在內存中的模型所做的更改,所以變化迷路。

試着改變你的「預覽」情況是這樣的:

when "Preview" 
    @feature.attributes = params[:feature] 
    render :action => "edit" 
    return 

有一件事我要說的是,我還考慮拆分該方法了一下,以使其更易於閱讀和測試。事情是這樣的:

before_filter :set_stylesheets 

def set_stylesheets 
    stylesheets << 'feature' 
end 

def update 
    @feature = Feature.find(params[:id]) 
    preview if params[:submit] == 'Preview' 
    apply_update if params[:submit] == 'Update' 
end 

def preview 
    @feature.attributes = params[:feature] 
    render :action => "edit" 
    return 
end 

def apply_update 
    # Rest of update action here. 
end 

這可以幫助你保持你的測試簡單,在一個時間集中在一個方法,並應使代碼更易於維護。

+0

謝謝!我知道必須有一種方法來獲得參數,但感覺到構建一個Feature.new(params [:feature])並不完全正確。屬性方法做到了神奇!謝謝你,保羅! – isthmuses

+0

@ user1802344沒問題:) –