Ruby on Rails当create方法失败时,render会丢失局部变量

Jim*_*mmy 2 validation ruby-on-rails render

嘿伙计我有一个简单的创建方法和一些验证,每当创建方法由于验证错误而失败时,它会重新呈现"新"操作.

问题在于我的新操作/视图我有一个在操作中建立的局部变量,并传递给局部变量以呈现用户正在创建的内容的一些相关信息.

现在当我的创建动作失败并且我尝试重新渲染"新"动作时,我总是很棒

undefined method `cover' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

错误.

处理在渲染上重新建立动作的局部变量而不是再次重定向到动作并且用户丢失它们输入的数据的最佳方法是什么?

有些澄清.以下是一些示例代码:

#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
Run Code Online (Sandbox Code Playgroud)

在我的new.html.erb文件中我有这样的东西

<%= @summary.cover %>
#page form etc...
Run Code Online (Sandbox Code Playgroud)

DGM*_*DGM 8

创建对象并尝试保存对象时,对象仍保留值和验证错误,因此将其传递到渲染中.通常,它在您的create方法中的命名方式与在新方法中的命名方式相同,因此模板才有效.

if @my_object.save
  flash[:notice] = "Successfully created."
  redirect_to ....
else
  render :action => 'new'  #assuming new.html.erb uses @my_object
end
Run Code Online (Sandbox Code Playgroud)

  • 这导致我得到了正确的答案,我刚刚在我的创建方法中初始化了对象并且很好地转移了,谢谢! (2认同)