心はいつも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

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

      関連記事

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

    10.3.2マイクロポストを作成する、です。 テストを書く micropostの …

    WordPress子テーマの作り方

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

    no image
    retweetボタンを追加してみました

    最近いろんなブログで見かけるretweetボタン。ブログのエントリーについている …

    格安で真央ごもりする浅田真央システム完成

    さいたまスーパーアリーナでの世界選手権で、浅田真央ちゃんのショートプログラム世界 …

    Eclipse CDTインストールでCould not find

    さいたまスーパーアリーナで全スサノオ使い果たし力尽きてはや1ヶ月と1週間。世の中 …

    メタプログラミングRuby第1章

    初めてのRuby2章と8章をやったところで、メタプログラミングRubyに進みます …

    RailsGirls松江からのぉ〜東京More!*既に2回目

    RailsGirls東京3回目に申し込みそびれた流れから松江に参加し、チューター …

    no image
    iPad2発表

    新しいiPad2がAppleより発表されました。動作は速くHDMIをサポートし、 …

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

    6.2.3長さを検証する、です。空データを拒否した次は、入力できるデータ長の制限 …

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

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