以下是我当前的代码。我移除了不需要了解问题的部分。
设置模型

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 Model替换Testing Model,如下所示:
class Testing < ActiveRecord::Base
  attr_accessor :program_id
end

查看是否是Arraysession_types属性Setting导致错误。似乎是因为使用Testing,我在form_for行之后的行中得到一个错误,这应该是正确的。(不需要这条线就可以解决问题)
我认为我没有正确理解模型的Array属性的初始化。如果您能帮助您理解为什么会抛出错误,我们将不胜感激!提前谢谢!= D

最佳答案

试试这个

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

你很少会犯错误,但这是第一件事。如果没有帮助,请发布整个错误。
原因是您的Setting类继承自ActiveRecord::Base,调用super首先调用父的initialize方法,这样您就可以向该方法添加功能(扩展它)。如果没有super则重写它,这意味着您可以用代码替换默认情况下它所做的一切(例如连接到数据库、验证)。

10-08 18:06