ruby-on-rails – 验证失败并且表单重定向回自身后,为什么实例变量为空?

ruby-on-rails – 验证失败并且表单重定向回自身后,为什么实例变量为空?,第1张

概述在Rails 3.2应用程序中,当某个表单无法保存(验证失败)并重定向回到表单时,我收到一个错误: undefined method `map' for nil:NilClass 直接导航到新路径或编辑路径时,此表单不显示任何错误. 错误来自具有自定义options_from_collection_for_select方法的选择字段. <%= f.select(:user_ids, options 在Rails 3.2应用程序中,当某个表单无法保存(验证失败)并重定向回到表单时,我收到一个错误:

undefined method `map' for nil:NilClass

直接导航到新路径或编辑路径时,此表单不显示任何错误.

错误来自具有自定义options_from_collection_for_select方法的选择字段.

<%= f.select(:user_IDs,options_from_collection_for_select_with_attributes(@users,:ID,:name,'data-attributes',:attributes ),{include_blank:true},{multiple:true}) %>

如果我用User.all替换实例变量@users,那么重定向后我不会收到错误.

我想@users在重定向后是空的,因此错误.但为什么? @users在新的和编辑控制器中定义.

我的控制器是:

def create  --bunch of stuff  if @model.save    --bunch of stuff    respond_to do |format|      format.HTML { render :text => model_url(@model) }      format.HTML { redirect_to(@model,:notice => 'Success!.') }      format.xml  { render :xml => @model,:status => :created,:location => @model }    end  else    respond_to do |format|      format.HTML { render :action => "new" }      format.xml  { render :xml => @model.errors,:status => :unprocessable_entity }    end  endend
解决方法 这是因为如果失败,你实际上并没有执行“新”动作.这是典型的控制器结构

class PotsController < ApplicationController  def new    @pot = Pot.new    @users = User.all  end  def create    @pot = Pot.new(params[:pot])    if @pot.create      redirect_to @pot,notice: "Created"    else      #****you are here****      render :new    end  endend

在上面,如果pot.create失败,它只是呈现新模板.你应该做的是在这种情况下获取你的实例变量

def create    @pot = Pot.new(params[:pot])    if @pot.create      redirect_to @pot,notice: "Created"    else      @users = User.all #this is the important line      render :new    end  end
总结

以上是内存溢出为你收集整理的ruby-on-rails – 验证失败并且表单重定向回自身后,为什么实例变量为空?全部内容,希望文章能够帮你解决ruby-on-rails – 验证失败并且表单重定向回自身后,为什么实例变量为空?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1255151.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存