復習用メモ。
おかしいところがあれば指摘してください。
routes.rb
routes.rb
Rails.application.routes.draw do
config = Rails.application.config.testapp
constraints host: config[:staff][:host] do
namespace :staff, path: config[:staff][:path] do
root 'top#index'
get 'login' => 'sessions#new', as: :login
...
-
constraints
でconfig/environments/*.rb
内のホスト名を参照して制限
名前空間
-
namespace
で名前空間を設定(ホスト名/staff/*
のようになる) - コントローラー名が
staff/*
のようになる - ルーティング名が
staff_*
のようになる
基本的な書き方
routes.rb
get 'login' => 'sessions#new', as: :login
-
HTTPmethod
'URLpath'
=>'controller#action'
(as: :alias)
のようになる - パスの指定は
:login
のようにシンボルで指定するかlogin_path
login_url
のようにする(login_pathはパスのみを返す)
resouce(s)
基本的なルーティングを自動生成するメソッド。(adminは名前空間)
HTTPmethod | URLpath | action |
---|---|---|
GET | admin/staff_members | index |
GET | admin/staff_members/:id | show |
GET | admin/staff_members/new | new |
GET | admin/staff_members/:id/edit | edit |
POST | admin/staff_members | create |
PATCH | admin/staff_members/:id | update |
DELETE | admin/staff_members/:id | destroy |
index, new, createは:idパラメータを持たず、他は指定する。
また以下のようなルーティング名が設定される。
URLpath | ルーティング名 |
---|---|
admin/staff_members | :admin_staff_members |
admin/staff_members/:id | :admin_staff_member |
admin/staff_members/new | :new_admin_staff_member |
admin/staff_members/:id/edit | :edit_admin_staff_member |
- 単数形と複数形に注意。
-
, only(except): [:index, :create, ...]
のようにすることで一部のアクションのみに設定できる
resource(単数リソース)
セッションやアカウント情報のように1つしかないリソースに対して使う。
HTTPmethod | URLpath | action |
---|---|---|
GET | admin/account | show |
GET | admin/account/new | new |
GET | admin/account/edit | edit |
POST | admin/account | create |
PATCH | admin/account | update |
DELETE | admin/account | destroy |
indexがなく、:idパラメータが存在しない。
URLpath | ルーティング名 |
---|---|
admin/account | :admin_account |
admin/account/new | :new_admin_account |
admin/account/edit | :edit_admin_account |
単数のみなのでシンプルである。
フォーム
form_forヘルパー
例1:
new.html.erb
<% @title = 'ログイン' %>
<div id="login-form">
<h1><%= @title %></h1>
<%= form_for @form, url: :staff_session do |f| %>
<div>
<%= f.label :email, 'メールアドレス' %>
<%= f.text_field :email %>
</div>
<div>
<%= f.label :password, 'パスワード' %>
<%= f.password_field :password %>
</div>
<div>
<%= f.submit 'ログイン' %>
</div>
<% end %>
</div>
例2:
new.html.erb
<% @title = '職員の管理登録' %>
<h1><%= @title %></h1>
<div id="generic-form">
<%= form_for [ :admin, @staff_member ] do |f| %>
<%= render 'form', f: f %>
<div class="buttons">
<%= f.submit '登録' %>
<%= link_to 'キャンセル', :admin_staff_members %>
</div>
<% end %>
</div>
パスは[ :admin, @staff_member ]のように配列でも指定できる。 (admin/staff_membersとなる)
HTTPメソッドはデータが保存前かどうかによってPOST(create)とPATCH(update)を判断する。
Railsが裏で自動的にやることを覚えるのが難しい。
coming soon...