お世話になってます。
「パーフェクトRuby on Rails」で勉強しているのですが、コールバックのところが実機で動作せずにつまずいています。。
【環境】Ruby2.3.0 / Rails4.2.6
ruby
1# 1. scaffoldで 適当なプロジェクトを生成し、BankAccountというモデルを追加。 2# 2. BankAccountにcredit_card_numberというカラムを追加してマイグレーション実行 3# 3.app/models/bank_account.rbを下記のように編集(本にはafter_saveなどもあったが割愛して確認) 4 5class BankAccount < ActiveRecord::Base 6 before_save EncryptionWrapper.new("credit_card_number") 7end 8 9class EncryptionWrapper 10 def initialize(attribute) 11 @attribute = attribute 12 end 13 14 def before_save(record) 15 record.send("#{@attribute}=", encrypt(record.send("#{@attribute}"))) 16 end 17 18 private 19 def encrypt 20 #省略 21 end 22end 23
この状態でbundle exec rails c
を実行し、コンソールで
$ be rails c irb(main):001:0> b = BankAccount.new(credit_card_number: '0123456789') NameError: uninitialized constant BankAccount::EncryptionWrapper
と入力したら、
NameError: uninitialized constant BankAccount::EncryptionWrapper
となってしまいました。
app/models/bank_account.rbにまとめて2つのクラスを定義することが間違っているのでしょうか(libに移してもだめでしたが。。)
(ちなみにbefore_saveをコメントアウトすればコンソール上からnewすることはできています)
uninitialized constant エラーになってしまう理由がわかる方、アドバイスをいただけると嬉しいです。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/29 16:17