繁体   English   中英

渲染操作错误Flash中nil:NilClass的未定义方法`map'

[英]undefined method `map' for nil:NilClass in render action error flash

我有一个使用Rails模型FlsCenter的rails表单, FlsCenter字母顺序命令它们在下拉列表中显示。 当表单的所有字段均未填写并且提交表单时,页面将显示500服务器错误,其中显示以下Rails错误:

undefined method `map' for nil:NilClass

map功能在以下视图代码中:

= f.select(:fls_center, @fls_centers.map{|p| [p.name, p.id]}, prompt: "Select a Program Center", selected:@school_application.fls_center)

@fls_centers在我的SchoolApplicationControllernew方法中定义的SchoolApplicationController

@fls_centers = FlsCenter.order('name ASC')

这是SchoolApplicationsController中的相关控制器方法

def create
@school_application = SchoolApplication.new(school_application_params)
  if @school_application.save_with_payment
    redirect_to pay_path(id: @school_application.id)
  else  
    @school_application.errors.full_messages.each do |msg|
      flash.now[:error] = msg
    end
    render action: "new"
  end
end

这是我的new方法:

  def new
    if application_params 
      @school_application = SchoolApplication.new(application_params)
    else
      @school_application = SchoolApplication.new()
    end 
    Rails.logger.debug(@fls_centers)
    @fls_centers = FlsCenter.order('name ASC')
  end

我可以想象的唯一出问题的是render action: "new"不执行new方法中的变量实例化。 我不知道如何消除这种情况。 谢谢

您正在执行Rails.logger.debug(@fls_centers)定义之前@fls_centers ,所以更改如下所示:

def new
  @fls_centers = FlsCenter.order('name ASC')
  if application_params 
    @school_application = SchoolApplication.new(application_params)
  else
    @school_application = SchoolApplication.new()
  end 
  Rails.logger.debug(@fls_centers)      
end

希望能帮助到你!

你猜对了。 调用时实际的new方法未执行

render action: "new"

您将不得不再次调用变量实例化:

def create
@school_application = SchoolApplication.new(school_application_params)
  if @school_application.save_with_payment
    redirect_to pay_path(id: @school_application.id)
  else  
    @school_application.errors.full_messages.each do |msg|
      flash.now[:error] = msg
    end
    @fls_centers = FlsCenter.order('name ASC')
    render action: "new"
  end
end

如果它们很多,最好在一个方法中重构它们,然后在new方法中以及在render调用之前调用该方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM