以下是我当前的代码。我移除了不需要了解问题的部分。
设置模型
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
查看是否是
Array
的session_types
属性Setting
导致错误。似乎是因为使用Testing
,我在form_for
行之后的行中得到一个错误,这应该是正确的。(不需要这条线就可以解决问题)我认为我没有正确理解模型的
Array
属性的初始化。如果您能帮助您理解为什么会抛出错误,我们将不胜感激!提前谢谢!= D 最佳答案
试试这个
def initialize
super
@session_types = Array.new
@program_id = ''
end
你很少会犯错误,但这是第一件事。如果没有帮助,请发布整个错误。
原因是您的
Setting
类继承自ActiveRecord::Base
,调用super
首先调用父的initialize
方法,这样您就可以向该方法添加功能(扩展它)。如果没有super
则重写它,这意味着您可以用代码替换默认情况下它所做的一切(例如连接到数据库、验证)。