心はいつも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を高速で復習する。6.3章。

    6.3セキュアなパスワードを追加する、です。 パスワードはセキュアであるべきと思 …

    実機なしでRetina 3.5インチのスクリーンショットを撮る

    iPhoneアプリ公開時に2種類の画像登録が必要です。 1つ目はアイコン。アプリ …

    no image
    future vision 2019 vs 2010

    マイクロソフトのfuture visonが話題らしい。 2019年の近未来。 情 …

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

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

    パーフェクトRuby 2章Rubyの基礎 2-6 モジュール

    p57 2-6 モジュール 2-6-1モジュールの定義式 モジュールはインスタン …

    GitにRailsプロジェクトをpushする

    HomebrewerでGitをインストールし、Rails 3.2やRails4. …

    rails gでのファイル名、クラス名、アクション名

    rails gすると、コントローラーとアクションができますが、 その書き方とファ …

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

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

    民●党批判したら検索順位が落ちたのか?

    このブログ、airpucciのドメインも元のwww.airpucci.comに戻 …

    no image
    RailsGirlsMore!でRailsTutorialのキモチワルイところがスッキリしました

    RailsGirls松江からのぉ〜東京More!*既に2回目から1ヶ月半。またま …