LoginSignup
1
4

More than 5 years have passed since last update.

Ruby on Rails復習 〜ルーティング〜

Last updated at Posted at 2017-03-10

復習用メモ。
おかしいところがあれば指摘してください。

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

      ...
  • constraintsconfig/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...

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4