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...
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当您创建对象并尝试保存它时,该对象仍然保留值和验证错误,因此将其传递到渲染中。通常它在创建方法中的名称与新方法中的名称相同,因此模板可以正常工作。
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.