Ruby on Rails Tutorial (9)
へろへろながらフライングで exercise を云々。
Defining an optional :size parameter for the gravatar_for helper. ということで app/helpers/users_helper.rb が例示されています。
module UsersHelper # Returns the Gravatar (http://gravatar.com/) for the given user. def gravatar_for(user, options = { size: 50 }) gravatar_id = Digest::MD5::hexdigest(user.email.downcase) size = options[:size] gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}" image_tag(gravatar_url, alt: user.name, class: "gravatar") end end
gravatar_for user, size: 40 な記述を view で云々とのこと。今の記述は
<% provide(:title, @user.name) %> <div class="row"> <aside class="span4"> <section> <h1> <%= gravatar_for @user %>
みたいなカンジ。
これ、gravatar の制約な世界なのかどうなのか。てか、gravatar て size な指定ができるんですね。github で使えないかなぁ。とりあえず直接アクセスして表示確認はできました。
次
2.Write tests for the error messages implemented in Listing 7.22. A suggested start appears in Listing 7.31.
とのことで以下を盛り込んで green 確認。branch 作って盛り込んでいます。
let(:submit) { "Create my account" } describe "with invalid information" do it "should not create a user" do expect { click_button submit }.not_to change(User, :count) end describe "after submission" do before { click_button submit } it { should have_selector('title', text: 'Sign up') } it { should have_content('error') } end end
その次の三番目の問題
とりあえず config/locales/en.yml を以下な状態にして
en: hello: "Hello world" activerecord: attributes: user: password_digest: "Password"
パスワードを空で signup してみると出力されたメセジが以下。
* Password can't be blank * Password can't be blank * Password is too short (minimum is 6 characters) * Password confirmation can't be blank
重複するので app/model/user.rb の validates を云々、とあるのだな。こうしてリトライ。
validates :password, length: { minimum: 6 } validates :password_confirmation, presence: true
これ、一体どーゆーことなのかな。別途確認の方向にて。試験は一応 green 確認。
その次の四番目の問題
以下な試験を spec/requests/user_pages_spec.rb "with valid information" なソレに追加。
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
とりあえず試験を実行してみました。げ、通りやがった。こちらも別途詳細確認。
そのまた次の五番目の問題
ここも content_tag というソレを確認した方が良さげ。
試しに盛り込んでみます。app/views/layouts/application.html.erb を以下に。
<% flash.each do |key, value| %> <%= content_tag(:div, value, class: "alert alert-#{key}") %> <% end %>
以下とどう違うのか。
<% flash.each do |key, value| %> <div class="alert alert-<%= key %>"><%= value %></div> <% end %>
挙動自体は変わりなし、です。別途確認入れます。