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)
创建对象并尝试保存对象时,对象仍保留值和验证错误,因此将其传递到渲染中.通常,它在您的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)