Rails - виртуальный атрибут в форме помощника
У меня странная ошибка с виртуальным атрибутом в форме помощника.
Моя модель выглядит так:
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
Какие-либо предложения?
2 ответа
Решение
Попробуй это:
def parent_name
self.parent.nil? ? nil : self.parent.name
end
Проблема в том, что он пытается получить доступ к имени "родителя", которого не существует. Таким образом, родительский объект в данный момент является объектом Nil, и вы пытаетесь получить доступ к атрибуту "имя" объекта Nil -> Fails
Изменить: может быть, более целесообразно вернуть пустую строку, например:
self.parent.nil? ? "" : self.parent.name
Похоже, что сообщение об ошибке говорит, что
self.parent
возвращается ноль внутри
def parent_name