0

check_box ヘルパーでエラーが発生し、何が間違っているのかわかりません:

undefined method `prive' for #<PubContributeur:0xa63b8fc>

これは私のapp/models/pub_contributeur.rb です:

class PubContributeur < ActiveRecord::Base

  attr_accessible :nom, :prive
  validates :nom, :presence => true
  validates :nom, :length => { :in => 2..30 }, :uniqueness => { :case_sensitive => false }

end

コントローラーで名前空間カタログを使用しています。これは、ビューapp/views/catalogs/pub_contributeurs/ _form.html.haml のような私の HAMLです。

= form_for [:catalogs, @pub_contributeur], :html => {:class => "formulaire-standard"} do |f|

  = render :partial => 'shared/error_message', :locals => { :element => @pub_contributeur, :debut_erreur => 'Ce contributeur ne peut être enregistré'}

  .groupe-champs
    .champ
      = f.label :nom
      = f.text_field :nom, :class => 'input-width-8-col', :required => 'required'
    .champ
      = f.label :prive
      = f.check_box :prive

何か案が ?

4

1 に答える 1

0

私は解決策を見つけました!

を交換すると

 = f.check_box :prive

インスタンス変数のデバッグを含む _form.rb の行:

= debug @pub_container

私は奇妙な何かを見ることができます:

--- !ruby/object:PubContributeur
attributes:
  id: 
  nom: 
  description: 
  created_at: 
  updated_at:

db/migration/ を確認したところ、問題が見つかりました。私の移行ファイルは、 「 prive 」というブール値フィールドではなく、 「 description 」という文字列フィールドを作成していました。

最初のエラー メッセージについて少し考えてみます。これは非常に奇妙です。なぜなら、モデル ファイル内のクラスにはアクセス可能な「prive」属性があり、クラスに属性として「nom」と「prive」があると誤解される可能性があるからです。

何が起こっているのかを理解するには、Rails と Ruby に関する高度な知識が必要です。これはActiveRecord::Baseの継承によるものです。舞台裏の Rails の魔法は、私の DB のテーブル pub_contributeurs の列の名前に基づいて、PubContributeur クラスの属性を作成します。

Railsのエラーメッセージがもう少し明確だったらよかったのに^^

于 2012-12-06T15:06:55.643 に答える