0

新しいモデル オブジェクトを作成しようとすると、奇妙なエラーが発生します。奇妙なことは、エラー メッセージの列がデータベースで利用できないことです。これは私がしたことです:

私のコンソール出力:

1.9.3p286 :002 > person = OZBPerson.new
     => #<OZBPerson Mnr: nil, UeberPnr: nil, Passwort: nil, PWAendDatum: nil, Antragsdatum: nil, Aufnahmedatum: nil, Austrittsdatum: nil, Schulungsdatum: nil, Gesperrt: 0, SachPnr: nil, encrypted_password: "$2a$10$...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: nil, updated_at: nil> 
1.9.3p286 :003 > person.valid?
    NoMethodError: undefined method `email' for #<OZBPerson:0x007ffd2b30dee8>
        from /usr/local/rvm/gems/ruby-1.9.3-p286/gems/activemodel-3.2.3/lib/active_model/attribute_methods.rb:407:in `method_missing'

私のレールモデル:

class OZBPerson < ActiveRecord::Base
    self.table_name = "ozbperson"
    self.primary_key = :Mnr

    attr_accessible :Mnr, 
    :UeberPnr
end

私のデータベーステーブル:

CREATE TABLE `ozbperson` (
`Mnr` int(10) unsigned NOT NULL,
`UeberPnr` int(10) unsigned DEFAULT NULL,
`Passwort` varchar(35) DEFAULT NULL,
`PWAendDatum` date DEFAULT NULL,
`Antragsdatum` date DEFAULT NULL,
`Aufnahmedatum` date DEFAULT NULL,
`Austrittsdatum` date DEFAULT NULL,
`Schulungsdatum` date DEFAULT NULL,
`Gesperrt` tinyint(2) NOT NULL DEFAULT '0',
`SachPnr` int(10) unsigned DEFAULT NULL,
`encrypted_password` varchar(64) NOT NULL DEFAULT '$2a$10$...',
`reset_password_token` varchar(128) DEFAULT NULL,
`reset_password_sent_at` datetime DEFAULT NULL,
`remember_created_at` datetime DEFAULT NULL,
`sign_in_count` int(10) DEFAULT '0',
`current_sign_in_at` datetime DEFAULT NULL,

「メール」のようなフィールドはありませんが、それでもこのエラー メッセージが表示されます。なにが問題ですか?

4

2 に答える 2

1

デバイスを使用している場合は、これをモデルに追加します

def email_required?
    false
end

デバイスモデルに現在存在する true をオーバーライドします。

于 2013-02-18T17:12:58.177 に答える
0

これは、deviseを使用しているためだと思います。Devise にはメール フィールドが必要なので、reset_password_token (メールでユーザーを検索しようとする) などのメソッドが機能します。デバイスを使用していない場合は、この回答を無視してください。それ以外の場合は、個人にメールを追加する必要があります。

于 2013-02-18T16:38:48.763 に答える