Ruby on Rails 11章後半

Ruby on Rails 11章後半をやりました。

●メタプログラミング(send)
ようはJavaでいうリフレクションですね。

>> ary
=> [“a”, “b”, “c”, “d”, “e”, “f”, “g”, “h”, “i”, “j”, “k”, “l”,
“m”, “n”, “o”, “p”, “q”, “r”, “s”, “t”, “u”, “v”, “w”, “x”, “y”, “z”]
>> ary.length
=> 26
>> ary.send(:length)
=> 26
>> ary.send(“length”)
=> 26

●メールのログをtailで流す

テキスト→htmlの順にログに出てた。
テキストだけひっかけられれば足りる。

tail -f -n 30 log/development.log | grep UserMailer -A 30

●minitestでメールの送信をテストする

ActionMailer::Base.deliveries.clear
setupにいれる。deliveriesは配列でメッセージを管理している。

assert_equal 1, ActionMailer::Base.deliveries.size
1通来てるよね!を確認。

assigns(:user)
コントローラの@userにアクセス。

●チュートリアルコードの良くないと思われるところ。
・send/リフレクションを説明するためにauthenticated?の第1引数にattributeを追加して
好き勝手出来るようにしてあるのはいかがなものか。

↓個人的には…。userモデルの外に出さない。

#rememberのトークンで認証する
def remember_authenticated?(remember_token)
return authenticated?(:remember, remember_token)
end

#トークンがダイジェストと一致するか.
private
def authenticated?(atr, token)
digest = self.send(“#{atr}_digest”)
return false if digest.nil?
BCrypt::Password.new(digest).is_password?(token)
end

・コントローラにIFのネストがあるし、
コントローラに書くべきではないID/PWの組み合わせ等が書いてあったりでいけてない。

↓こんな感じにリファクタリング

def create
@user = find_valid_user(params[:session][:email], params[:session][:password])
user = @user
if !user
flash.now[:danger] = ‘invalid email/password combination’
render ‘new’
return
end
if !user.activated?
message = “Account not activated.”
message += “Check your email for the activation link.”
flash[:warning] = message
redirect_to root_url
return
end
log_in(user)
params[:session][:remember_me] == ‘1’ ? remember(user) : forget(user)
#redirect_to user
redirect_back_or( user )
end

・Activateする処理をコントローラに書いている
→とおもったらこれは後々リファクタリングネタとして出てくる。

コメントを残す

メールアドレスが公開されることはありません。