繁体   English   中英

Rails undefined方法`[]'为nil:NilClass

[英]Rails undefined method `[]' for nil:NilClass

以下是我目前的代码。 我删除了不需要理解问题的部分。

设定模型

class Setting < ActiveRecord::Base
  attr_accessor :program_id, :session_types

  def initialize
    @session_types = Array.new
    @program_id = ''
  end
end

设置控制器

  def new
    @setting = Setting.new
    puts @setting.session_types.instance_of? Array
  end

设置视图

<%= form_for(@setting) do |f| %> #ERROR LINE
    ...
<% end %>

我收到此错误:

ActionView::Template::Error (undefined method `[]' for nil:NilClass):
    3: </h1>
    4: <p>We need to get your booking page setup. Please select the Program you wish to put up for booking.</p>
    5: 
    6: <%= form_for(@setting) do |f| %>
    7:     <% @programs.each do |program| %>
    8:         <%= f.radio_button(:program_id, program.program_id)%>
    9:         <%= label_tag(:program_name, program.name) %>
  app/views/settings/new.html.erb:6:in `_app_views_settings_new_html_erb__94314060479739781_70294544827460'

@setting.session_types = Empty Array调试时@setting.session_types = Empty Array

所以我尝试用一​​个没有数组属性的简单Testing Model替换Setting Model ,如下所示:

class Testing < ActiveRecord::Base
  attr_accessor :program_id
end

查看是否是导致错误的SettingArray属性session_types 看起来好像Testing ,我在form_for行之后的行中得到一个错误,这应该是正确的。 (不需要该线来解决问题)

我想我不能正确理解模型的Array属性的初始化。 任何有助于理解错误抛出原因的帮助将不胜感激! 提前致谢! = d

试试这个

def initialize
  super
  @session_types = Array.new
  @program_id = ''
end

你很难贴上你的错误,但这是我想到的第一件事。 如果这没有帮助,请发布整个错误。

原因是你的Setting类继承自ActiveRecord::Base ,调用super首先调用parent的initialize方法,这样你就可以为方法添加功能(扩展它)。 如果没有super ,则覆盖它,这意味着您可以通过代码替换它默认执行的所有操作(例如,连接到数据库,验证)。

不要覆盖ActiveRecord::Base上的initialize方法。 请改用after_initialize回调。 可能会引用您的问题http://blog.dalethatcher.com/2008/03/rails-dont-override-initialize-on.html

暂无
暂无

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

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