Ruby on Rails Tutorial (10)
Chapter 7 の exercise の不明点について確認を。
- validation について
- 追加した spec について
- content_tag について
password_digest
あまり理解できていなかった模様。
- Gemfile に bcrypt-ruby 3.0.1 を指定
- user モデルに password_digest という属性を追加
- この属性にはアクセスできなくて良い
- attr_accessible に password および password_confirmation を追加
- user モデルに has_secure_password を指定
- これ、メソド呼び出しだったはずですよね。。
Chapter 6 をきちんと読んでいないのがバレバレですな。User.create する時には password_digest はスルーで accessible な二つの属性に同値を代入、なのか。
>> User.create(name: "Michael Hartl", email: "mhartl@example.com", ?> password: "foobar", password_confirmation: "foobar")
なので、エラーメセジ自体は password_digest ではなく password にしておいて (config/locales/en.yml)、validate もどちらか一方で良い、という理解で良いのかどうか
追加した spec について
ええと、追加したのは以下ですよね (一部のみ)。
describe "with valid information" do before do fill_in "Name", with: "Example User" fill_in "Email", with: "user@example.com" fill_in "Password", with: "foobar" fill_in "Confirmation", with: "foobar" end # 略 describe "after saving the user" do before { click_button submit } let(:user) { User.find_by_email('user@example.com') } it { should have_selector('title', text: user.name) } it { should have_selector('div.alert.alert-success', text: 'Welcome') } end
登録成功して @user に登録したソレが、という形で登録後に表示されるナニを確認してます。確認している部分としては app/views/users/show.html.erb の以下の部分。
<% provide(:title, @user.name) %>
これは app/views/layouts/application.html.erb の以下で出力されてます。
<html> <head> <title><%= full_title(yield(:title)) %></title>
title なソレはここを確認してます。そして、もう一つは app/views/layouts/application.html.erb の以下な部分の確認ですね。
<body> <%= render 'layouts/header' %> <div class="container"> <% flash.each do |key, value| %> <%= content_tag(:div, value, class: "alert alert-#{key}") %> <% end %>
controller 側で登録成功したら云々、な記述があります。
def create @user = User.new(params[:user]) if @user.save flash[:success] = "Welcome to the Sample App!" redirect_to @user
div.alert.alert-success ですし Welcome ですね。いやはや。
content_tag について
以下によれば
content_tag :p, "Hellow world"
で
<p> Hello world </p>
なんすか。ああ、確かに
<%= content_tag(:div, value, class: "alert alert-#{key}") %>
は
<div class="alert alert-<%= key %>"><%= value %></div>
ですね。どうもリハビリ微妙すぎる。何とも無い部分でひっかかってたりして。