ちょと復習

if (document.location.href.match(/\/groups\/\d+\/messages/)) {
    setInterval(reloadMessages, 7000);
  }

.location.href現在のページのurlを取得してmatchメソッドを使い(引数には正規表現を使う)、特定のページ(正規表現にマッチするページ)でだけ7秒置きに関数を呼び出す。

 

名前空間を使って同名のコントローラーだが働きが違う物を作成する

仮にmessagesコントローラーがあったとして、メッセージに関するコントローラーをもう一つ作りたい場合にcontrollersディレクトリ直下に今回はapiというフォルダを作ったとしてその中にmessagesコントローラーを作る場合は::でつなげて装飾することでクラスを区別する。(名前空間, namespace) 。ディレクトリの違いでクラスを区別することは出来ないので、このように名前空間を使い区別するというルールがある。

class Api::MessagesController < ApplicationController
  def index
  end
end

ルーティングに関して

一例として

resources :groups, only: [:new, :create, :edit, :update] do
    resources :messages, only: [:index, :create]
    namespace :api do
      resources :messages, only: :index, defaults: { format: 'json' }
    end
  end

というように記述する。resources:messagesが二つあるが区別されている

 

ajaxで設定するurlの注意点

urlに何も指定しなかった場合はリクエストは現在のurlと同じになるので、現在のページがgroups/id番号であった場合に

/groups/id番号/api/messagesをリクエストしたいのなら

ajaxでのurl指定は

url: "api/messages"

となる

 

 

追記予定