我在表单助手中遇到了一个奇怪的错误。
我的模型看起来像这样:
class Folder < ActiveRecord::Base
...
# VIRTUAL ATTRIBUTES
def parent_name
self.parent.name
end
def parent_name=(name)
self.parent = self.class.find_by_name(name)
end
...
end
我正在使用HAML和SimpleForm。当我像这样使用我的表格时......
= simple_form_for [@collection, form], :html => { :class => 'full' } do |f|
= f.input :name
= f.input :description
= f.submit
......它完美无缺。但是如果我尝试像这样访问虚拟属性......
= simple_form_for [@collection, form], :html => { :class => 'full' } do |f|
= f.input :name
= f.input :parent_name
= f.input :description
= f.submit
...我收到此错误:
NoMethodError in Folders#index
Showing ... where line #3 raised:
undefined method `name' for nil:NilClass
Extracted source (around line #3):
1: = simple_form_for [@collection, form], :html => { :class => 'full' } do |f|
2: = f.input :name
3: = f.input :parent_name
4: = f.input :description
5: = f.submit
有什么建议吗?
答案 0 :(得分:5)
试试这个:
def parent_name
self.parent.nil? ? nil : self.parent.name
end
问题是,它试图访问不存在的“父”的名称。所以父在这一点上是Nil对象而你正在尝试访问Nil对象的属性“name” - &gt;失败
编辑:也许它更适合返回一个空字符串,如:
self.parent.nil? ? "" : self.parent.name
答案 1 :(得分:1)
看起来该错误信息正在说
self.parent
在
中返回nildef parent_name