ちょと復習
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"
となる
追記予定