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

我在我的控制器上使用命名空间目录。这是我的 HAML 之类的视图app/views/catalogs/pub_contributeurs/_form.html.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/ 并发现了问题。我的迁移文件正在创建一个名为“ description ”的字符串字段,而不是一个名为“ prive ”的布尔字段。

如果我们考虑一下第一个错误消息。这很奇怪,因为模型文件中的类确实有一个“prive”可访问属性,这可能会误导我们认为该类确实有“ nom ”和“ prive ”作为属性。

要了解正在发生的事情,我们必须对 Rails 和 Ruby 有深入的了解。这来自ActiveRecord::Base的继承。幕后 Rails 的魔力根据我的数据库的表 pub_contributeurs 中的列名称为 PubContributeur 类创建属性。

我希望 Rails 错误消息能更明确一点^^

于 2012-12-06T15:06:55.643 回答