0

フォームヘルパーの仮想属性で奇妙なエラーが発生しています。

私のモデルは次のようになります。

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

助言がありますか?

4

2 に答える 2

5

これを試して:

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

問題は、存在しない「親」の名前にアクセスしようとすることです。したがって、この時点で親はNilオブジェクトであり、Nilオブジェクトの属性「name」にアクセスしようとしています->失敗

編集:次のような空の文字列を返す方が適切かもしれません:

self.parent.nil? ? "" : self.parent.name
于 2011-03-05T00:09:42.133 に答える
1

そのエラーメッセージは次のように言っているようです

self.parent

内部にnilを返しています

def parent_name
于 2011-03-05T00:01:38.003 に答える