心はいつもAirPucci (空元気でもいいから)

毎日がPucciを着ているような気分

RailsTutorial4.0を高速で復習する。9.3.4章。

   


9.3.4パーシャルのリファクタリング、です。

テストパスしているのでリファクタリングです、

  • <%= gravatar_for user, size: 52 %>
    <%= link_to user.name, user %>
  • を書き換えます。
    リスト9.36 インデックスビューで最初のリファクタリングを行う。
    app/views/users/index.html.erb

    <% provide(:title, 'All users') %>
    <h1>All users</h1>
    
    <%= will_paginate %>
    
    <ul class="users">
      <% @users.each do |user| %>
        <%= render user %>
      <% end %>
    </ul>
    
    <%= will_paginate %>
    

    renderをパーシャルの名前の文字列に対してではなく、Userクラスのuser変数に対して実行していることに注意してください。この場合、Railsは自動的に_user.html.erbという名前のパーシャルを探します。

    リスト9.37 単一のユーザーを出力するパーシャル。
    app/views/users/_user.html.erb

    <li>
      <%= gravatar_for user, size: 52 %>
      <%= link_to user.name, user %>
    </li>
    

    renderを@users変数に対して直接実行します

    リスト9.38 完全にリファクタリングされたユーザーインデックス。
    app/views/users/index.html.erb

    <% provide(:title, 'All users') %>
    <h1>All users</h1>
    
    <%= will_paginate %>
    
    <ul class="users">
      <%= render @users %>
    </ul>
    
    <%= will_paginate %>
    

    Railsは@usersをUserオブジェクトのリストであると推測します。さらに、ユーザーのコレクションを与えて呼び出すと、Railsは自動的にユーザーのコレクションを列挙し、それぞれのユーザーを_user.html.erbパーシャルで出力します

    テストはパスします。

    9.4ユーザーを削除する、です。

    管理ユーザーを作る

    削除はadmin限定機能にします。論理値をとるadmin属性をUserモデルに追加し、admin?メソッド (論理値を返す) を使えるようにします。

    テストを書く

    リスト9.39 admin属性に対するテスト。
    spec/models/user_spec.rb

    require 'spec_helper'
    
    describe User do
    略
      it { should respond_to(:authenticate) }
      it { should respond_to(:admin) }
    
      it { should be_valid }
      it { should_not be_admin }
    
      describe "with admin attribute set to 'true'" do
        before do
          @user.save!
          @user.toggle!(:admin)
        end
    
        it { should be_admin }
      end
    略
    end
    

    toggle!メソッドを使用して admin属性の状態をfalseからtrueに反転しadmin?メソッドが使用できるか確認しています。

    ユーザーモデルにadmin属性を追加

    rails generate migration add_admin_to_users admin:boolean
    

    リスト9.40 論理値を取るadmin属性をユーザーに追加するマイグレーション。
    db/migrate/[timestamp]_add_admin_to_users.rb

    class AddAdminToUsers < ActiveRecord::Migration
      def change
        add_column :users, :admin, :boolean, default: false
      end
    end
    

    デフォルトを管理者じゃない設定にします。

    ところで、
    管理者属性があると、使える機能が出てくる仕様と、
    管理者用の画面があって、通常の機能と分かれている仕様があって、後者が求められるというかあたりまえかと思います。前者は日本以外仕様といいますか。

    bundle exec rake db:migrate
    bundle exec rake test:prepare
    

    管理者のテストデータ作る

    リスト9.41 サンプルデータ生成コードに管理者を1人追加する
    lib/tasks/sample_data.rake

    namespace :db do 
      desc "Fill database with sample data"
      task populate: :environment do
        admin = User.create!(name: "Example User",
                             email: "example@railstutorial.jp",
                             password: "foobar",
                             password_confirmation: "foobar",
                             admin: true)
    略
      end
    end
    

    データと作ります。

    bundle exec rake db:reset
    bundle exec rake db:populate
    bundle exec rake test:prepare
    

    次は
    9.4.2 destroyアクション
    からです。

     - テクニカル ,

    Message

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

      関連記事

    WordPress子テーマの作り方

    デザイン変更したairpucci、TwentyTwelveというWordPres …

    no image
    RailsTutorial4.0を高速で復習する。9.3.2章。

    9.3.2サンプルのユーザー、です。 Faker gemで、実際にありそうなユー …

    attr_accessorでRuby文法を噛み締める

    作りたいwebアプリがあって、プログラムやろう!となって現在にいたってる訳です。 …

    no image
    MacBookAir 1日め

    ようやくMacBookAir を購入しました。Dellノートがずっと調子悪かった …

    no image
    RailsTutorial4.0を高速で復習する。5.6章。演習1問目。

    5.6演習です。 一問目。 リスト5.28の静的ページのテストコードは簡潔ですが …

    iPadのiBooksで自炊とかしたPDFの電子書籍を読む

    手順覚えないのでブログに書きます。 Bookscan使用して手持ちPDF電子書籍 …

    no image
    iPhone充電3回分?大容量バッテリーで残念がなくなりました

    iPhoneは便利なので、一日中使いっ放しの日がよくあります。iPhoneがあれ …

    no image
    RailsTutorial4.0を高速で復習する。5.6章。演習2問目。

    5.6演習、2問目です。これをやったら、すっ飛ばしているリンク貼り作業をします。 …

    no image
    createとnew

    ruby on rails3プリケーションプログラミングの本の内容をruby2. …

    no image
    RailsTutorial4.0を高速で復習する。6.2.4章。

    6.2.4フォーマットを検証する です。 メールアドレスは文字数制限だけじゃだめ …