• 検索結果がありません。

html.erb で呼び出すところは以下のようになります。

ドキュメント内 Rails1.indd (ページ 104-107)

<div class="form-group">

<%= f.label :role %>

<%= f.select :role, User::ROLE.map{|u|

[t(u), u]}, class: "form-control" %>

</div>

クラス名のあとにコロンを二つ付けてネストし、セレクトボックスに渡せばOKです。また、 config/locales/models.ja.ymlへUser::ROLEについても情報を与えておけば、

テンプレート側でt(hoge)として呼び出せば、自動的にI18nが認識されます。

ja:

admin: '管理者' general: '一般'

また、

user:

以下に、追加したフィールドの名称を設定していますが、今回はサンプルとし てお渡ししたymlファイルにすでに記入されていましたので省略します。

commit

最後に、テストデータの編集です。

db/seeds.rb を以下のように変更しておいてください。

今後、アプリをリリースする際の元データとして利用します。

admin = User.where(email: '[email protected]') unless admin.present?

User.create(name: 'Admin', email: 'test@example.

com', password: 'monka_project', password_

confirmation: 'monka_project', role: 'admin') end



すでにデータベースにあるユーザについては、データ量が多ければスクリプトを書くなどし て対応しますが、今は1件だけですので、ブラウザから入力するか、

rails console で

対応します。テスト用データベースは、以下のようにテストモードで更新を行い、

rails console

内でユーザデータの更新をしてください。

usernamey:~/workspace (master) $ RAILS_ENV=test rails db:migrate

== 20161221085504 AddColumnsToUser: migrating =================================

-- add_column(:users, :name, :string) -> 0.0033s

-- add_column(:users, :role, :string) -> 0.0003s

== 20161221085504 AddColumnsToUser: migrated (0.0038s) ========================

username:~/workspace (master) $ RAILS_ENV=test rails console Running via Spring preloader in process 63339

Loading test environment (Rails 5.0.0.1) 2.3.0 :001 > user = User.first

User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]]

=> #<User id: 1, email: "[email protected]", created_at: "2016-12-20 21:57:24", updated_at: "2016-12-21 21:12:09", name: "", role: "">

2.3.0 :002 > user.update_attributes(name: "Admin", role: "admin") (0.2ms) begin transaction

SQL (0.4ms) UPDATE "users" SET "updated_at" = ?, "name" = ?,

"role" = ? WHERE "users"."id" = ? [["updated_at", 2016-12-21 21:12:29 UTC], ["name", "Admin"], ["role", "admin"], ["id", 1]]

(9.0ms) commit transaction => true

2.3.0 :003 > User.first

User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]]

=> #<User id: 1, email: "[email protected]", created_at: "2016-12-20 21:57:24", updated_at: "2016-12-21 21:12:29", name: "Admin", role: "admin">



そして、

spec フォルダ以下で扱うデータを修正します。 spec/controllers/

users_controller_spec.rb

については、

valid_attributes

と、ログインユー ザーの変更をしてください。

let(:valid_attributes) {

{ name: '一般人', email: '[email protected]', password: 'password', password_confirmation: 'password', role: 'general' } # 変更 }

let(:admin_user) { User.where(role: 'admin').first } # 変更 before(:each) { sign_in admin_user }

ここでログインするユーザは、管理者権限のある人でないとダメですね。

同様に、spec/controllersとspec/views以下のファイルのsign_inするユーザー の呼び出しを変更してください。その後、テストを実行してすべて通ればOKです。

commit

4. 商品一覧ページの作成

商品を設定する管理画面ができましたから、いよいよそれらを売る画面を構築していきます。

1stリリースでは商品を展示するだけで、購入はまだできません。さながら広告宣伝のよう ですね。

(1) . 商品を一覧表示する画面

ここからは一般ユーザーに向けてのページになります。今までは管理者用のページでしたか ら、認証をつけてログインさせてから見せるようにしています。一般ユーザーに見せるとこ ろ、見せないところ、アクセスできるところ、できないところをしっかり意識しながら作って行 いましょう。

  ① ルーティングとコントローラの作成

ドキュメント内 Rails1.indd (ページ 104-107)

関連したドキュメント