代码之家  ›  专栏  ›  技术社区  ›  Jimmy

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

  •  2
  • Jimmy  · 技术社区  · 16 年前

    嘿,伙计们,我有一个简单的带有一些验证的create方法,每当create方法由于验证错误而失败时,它就会重新呈现“new”操作。

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

    现在,当我的创建操作失败,我试图重新呈现“新”操作时,我得到的总是令人敬畏的

    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...
    
    1 回复  |  直到 16 年前
        1
  •  8
  •   DGM    16 年前

    创建对象并尝试保存它时,该对象仍保留值和验证错误,因此将其传递到渲染中。通常,它在创建方法中的名称与在新方法中的名称相同,因此模板只起作用。

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