Ruby on Rails 当创建方法失败时,渲染会丢失局部变量

发布于 2024-09-06 02:19:42 字数 691 浏览 6 评论 0原文

大家好,我有一个带有一些验证的简单创建方法,每当创建方法由于验证错误而失败时,它都会重新呈现“新”操作。

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

现在,当我的创建操作失败并且我尝试重新渲染“新”操作时,我收到了总是令人敬畏的

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...

Hey guys I have a simple create method with some validations and whenever the create method fails due to validation errors it re-renders the 'new' action.

The problem is in my new action/view I have a local variable that is established in the action and passed to a partial to render some related information to what the user is creating.

Now when my create action fails and I try to re-render the 'new' action I'm getting the always awesome

undefined method `cover' for nil:NilClass

error.

What is the best way to handle re-establishing my action's local variables on a render instead of redirecting to the action again and the user losing the data they input?

For some clarification. Here is some sample code:

#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

in my new.html.erb file i have something like this

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谜兔 2024-09-13 02:19:42

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

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

When you create the object and attempt to save it, the object still holds the values and the validation errors, so pass it on into the render. Usually it is named the same in your create method as it is in your new method, so the template just works.

if @my_object.save
  flash[:notice] = "Successfully created."
  redirect_to ....
else
  render :action => 'new'  #assuming new.html.erb uses @my_object
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文