2010-06-16 95 views
1

嘿傢伙我有一個簡單的創建方法與一些驗證和每當創建方法由於驗證錯誤失敗它重新呈現'新'行動。Ruby on Rails創建方法失敗時,呈現丟失局部變量

問題是在我的新行動/視圖我有一個局部變量,在行動中建立並傳遞給部分呈現一些相關的信息,以用戶正在創建。

現在,當我創建行動失敗,我嘗試重新呈現「新」的行動,我發現了總是真棒

undefined method `cover' for nil:NilClass 

錯誤。

什麼是最好的方式來處理在渲染中重建我的動作的局部變量,而不是再次重定向到動作和用戶失去他們輸入的數據?

對於一些澄清。下面是一些示例代碼:

#controller.rb 
def new 
    @summary = User.find(params[:user_id]) 
    @page = Page.new 
end 

def create 
    @page = Page.new(params[:page]) 
    if @page.save 
    redirect_to @page 
    else 
    render :action => 'new' 
    end 
end 
我new.html.erb文件

我有這樣的事情

<%= @summary.cover %> 
#page form etc... 

回答

7

當您創建的對象,並試圖將其保存,對象仍持有價值和驗證錯誤,所以將它傳遞給渲染器。通常它的創建方法與新方法中的命名方式相同,因此模板可以正常工作。

if @my_object.save 
    flash[:notice] = "Successfully created." 
    redirect_to .... 
else 
    render :action => 'new' #assuming new.html.erb uses @my_object 
end 
+0

有問題的對象實際上是與創建對象不同的對象。 – Jimmy 2010-06-16 18:23:46

+1

這導致我正確的答案,我剛剛在我的創建方法中初始化對象,它很好地轉移,謝謝! – Jimmy 2010-06-16 18:28:45