[英]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
查看是否是导致错误的Setting
的Array
属性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.