Ruby on rails Rails未定义的方法“[]';零级:零级

Ruby on rails Rails未定义的方法“[]';零级:零级,ruby-on-rails,arrays,ruby,ruby-on-rails-4,Ruby On Rails,Arrays,Ruby,Ruby On Rails 4,以下是我当前的代码。我删除了不需要了解问题的部分 设定模型 class Setting < ActiveRecord::Base attr_accessor :program_id, :session_types def initialize @session_types = Array.new @program_id = '' end end 设置视图 <%= form_for(@setting) do |f| %> #ERROR LINE

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

设定模型

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

  def initialize
    @session_types = Array.new
    @program_id = ''
  end
end
设置视图

<%= form_for(@setting) do |f| %> #ERROR LINE
    ...
<% end %>
查看是否是
设置
数组
属性会话类型。由于
测试
,我在行的
表单_之后的行中得到了一个错误,应该是正确的。(不需要线路来解决问题)

我认为我没有正确理解模型的
数组
属性的初始化。任何有助于理解抛出错误原因的帮助都将不胜感激!提前谢谢=试试这个

def initialize
  super
  @session_types = Array.new
  @program_id = ''
end
您很少粘贴错误,但这是我想到的第一件事。如果这没有帮助,请发布整个错误


原因是您的
设置
类继承自
ActiveRecord::Base
,调用
super
首先调用父级的
initialize
方法,这样您就可以向该方法添加功能(扩展它)。如果没有
super
,您将覆盖它,这意味着您将用您的代码替换默认情况下它所做的一切(例如连接到数据库、验证)。

不要覆盖
ActiveRecord::Base
上的
initialize
方法。在初始化回调后使用
。参考你的问题

确保你认为是
设置
类。@DaveNewton你这是什么意思?我只有一门课叫Setting抱歉。添加了完整的错误。添加“super”似乎可以解决这个问题。有什么原因吗?@ali因为不建议重写initialize,因为它不是您的基类,您绕过了所有Rails的初始化。
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'
class Testing < ActiveRecord::Base
  attr_accessor :program_id
end
def initialize
  super
  @session_types = Array.new
  @program_id = ''
end