Rails - виртуальный атрибут в форме помощника - PullRequest
0 голосов
/ 05 марта 2011

У меня странная ошибка с виртуальным атрибутом в помощнике форм.

Моя модель выглядит следующим образом:

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 ]

5 голосов
/ 05 марта 2011

Попробуйте:

def parent_name
 self.parent.nil? ? nil : self.parent.name
end

Проблема в том, что он пытается получить доступ к имени «родителя», которого не существует.Таким образом, parent находится в данный момент в объекте Nil, и вы пытаетесь получить доступ к атрибуту «имя» объекта Nil -> Fails

Редактировать: возможно, более целесообразно вернуть пустую строку, например:

self.parent.nil? ? "" : self.parent.name
1 голос
/ 05 марта 2011

Похоже, что в сообщении об ошибке говорится, что

self.parent

возвращает ноль внутри

def parent_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...