<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) . 商品を一覧表示する画面
ここからは一般ユーザーに向けてのページになります。今までは管理者用のページでしたか ら、認証をつけてログインさせてから見せるようにしています。一般ユーザーに見せるとこ ろ、見せないところ、アクセスできるところ、できないところをしっかり意識しながら作って行 いましょう。