2010-06-16 54 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