コントローラ(controller)
コントローラについて
説明
モデルからデータを受け取りビューにレンダリングする仕組み
特徴
- コントローラには複数のアクションが含まれている
- コントローラの名前の付け方には決まりがある
規約
- 英大文字から始まる
- 英数字のみ
- 単語の区切りでは、先頭文字を大文字
- EntriesController
- UserCommentsController
- ファイルはapp/controllerディレクトリに格納
- ファイル名は、コントローラ名の単語区切りを「_」にし、すべて小文字にしたもの
- app/controllers/entries_controller.rb
- app/controllers/user_comments_controller.rb
ひな型
class コントローラ名Controller < ApplicationController
def メソッド名
end
edn
パラメータの取得
説明
URLから送られてきた値やフォームで入力した値
使い方
params[:パラメータ名]
特徴
- リンクによるパラメータの受け渡し
- フォームによるパラメータの受け渡し
例
リンクによるパラメータの受け渡し
ビュー
link_to 'ユーザ名', controller: 'users', action: 'show', id: =1
コントローラ
def show
id = params[:id] # id = 1
end
フォームによるパラメータの受け渡し
ビュー
form_for @user do |f|
f.text_field :name
f.text_area :body
end
コントローラ
def create
name = params[:name]
body = params[:body]
end
配列でパラメータの受け渡し
xxx[]
ハッシュでパラメータの受け渡し
xxx[aaa]
その他
コントローラ名やアクション名の取得
params[:controller]やparams[:action]で、コントローラ名やアクション名を取得できる
アップロードされたファイルを取得
説明
フォームからアップロードされたファイルを取得
使い方
ファイル名
params[:パラメータ名].original_filename
コンテンツタイプ
params[:パラメータ名].content_type
サイズ
params[:パラメータ名].size
ファイル本体の読み込み
params[:パラメータ名].read
例
アップロードファイルを取得
params[:file]
ファイル名を取得
params[:file].original_filename
拡張子の取得
params[:file].content_type
ファイルのサイズの取得
params[:file]
ファイル本体の取得
params[:file].read
ページのレイアウトを設定
説明
- 使用するレイアウトを明示的に指定
- 指定しない場合は、app/views/layouts/コントローラ名.html.erbを使用
- app/views/layouts/コントローラ名.html.erbが無い場合は、app/views/layouts/application.html.erbを使用
使い方
layout レイアウト名
例
基本となる使い方
layout bank_standard
動的にレイアウトを変える
layout :writers_and_readers
private
def writers_and_readers
logged_in? ? "writer_layout" : "reader_layout"
end
特定のアクションのみにレイアウトを指定
layout weblog_standard, only: :rss
特定のアクション以外にレイアウトを指定
layout weblog_standard, except: :rss
表示させるviewファイルを指定して表示
説明
表示させるviewファイルを指定して表示
使い方
render(表示方法..)
オプション
オプション | 説明 |
---|---|
:content_type | content-typeを変更 |
:layout | レイアウトを指定 |
:location | HTTPのLocationヘッダーを設定 |
:status | ステータスコードを制御 |
:formats | フォーマット指定 |
表示方法
表示方法 | 説明 |
---|---|
:action | 他のアクションのテンプレートを表示 |
:partial | 部分テンプレートを呼び出して表示 |
:template | テンプレートを指定して表示 |
:text | 任意のテキストを指定して表示 |
:xml | 指定したテキストを表示し、コンテンツタイプをapplication/xmlに設定 |
:json | 指定したテキストを表示し、コンテンツタイプをtext/x-jsonに設定 |
:update | ブロックで処理を行い表示 |
:file | ファイルを指定して表示 |
:inline | ビューとするソースコードを直接指定 |
:plain | 平文テキストを表示 |
:html | HTML文字列を表示 |
:js | JavaScriptを表示 |
:body | 生のコンテンツを表示 |
注意点
- 同じアクション内でrenderメソッドを複数呼び出すと、エラーになるので、and returnを付ける
render :action
説明
他のアクションのテンプレートを表示
使い方
render(action: "アクション名" [, layout: レイアウト名])
例
「_new.html.erb」を表示
render action: "new"
他のレイアウトを使用
render action: "new", layout: "user"
レイアウトは使用しない
render action: "new", layout: false
render :template
説明
他のコントローラのテンプレートを表示
使い方
render template: コントローラ名/アクション名
例
他のコントローラのテンプレートを表示
render template: "user/show"
templateを省略
render "user/show"
render :file
説明
アプリケーション外のテンプレートを表示
「/」で始まる場合はファイル出力と認識するので、fileオプションは省略可能
使い方
render file: ファイルパス
例
「/common/template/index」を表示
render file: "/common/template/index"
fileを省略
render file: "/common/template/index"
render :text
説明
文字列を直接表示
使い方
render text: "文字列"
例
レイアウトを適用
render text: "文字例", layout: true
エラーメッセージの表示
render text: "文字例", status: 500
「hello world!」を表示
render text: "hello world!"
文字列とstatusコード500を返す
render text: "Explosion!", status: 500
レイアウトを使用して文字列を表示
render text: "Hi there!", layout: true
render :partial
説明
部分テンプレート
使い方
render partial: "部分テンプレート名"
例
_page.rhtmnlを使って表示
render partial: "page"
部分テンプレートを繰り返し表示
render partial: "user", collections: @users
部分テンプレートにローカル変数を渡す
render partial: "user", locals: { val1: xxx, val2: xxx }
render :inline
説明
アプリケーション外のテンプレートを表示
使い方
render inline: テンプレート文字列
例
現在の時刻を表示
render inline: "<%= Time.now %>"
render :xml
説明
指定されたテキストを表示し、コンテンツタイプをapplication/xmlに設定
使い方
render xml: モデル or 文字列
例
pagesテーブルの内容をXML形式で出力
@pages = Page.all
render xml: @pages
render :json
説明
指定されたテキストを表示し、コンテンツタイプをapplication/xmlに設定
使い方
render json: モデル or 文字列
例
pagesテーブルの内容をJSON形式で出力
@pages = Page.all
render json: @pages
例
404コード
render nothing: true, status: 404
render :plain
説明
平文テキストを表示
使い方
render plain: 文字列
例
OK
render plain: "OK
render :html
説明
平文テキストを表示
使い方
render html: 文字列
例
Not Found
render html: helpers.tag.strong('Not Found')
render :js
説明
JavaScriptを表示
使い方
render js: 文字列
例
JavaScriptを表示
render js: "alert('Hello Rails');"
render :body
説明
生のコンテンツを表示
使い方
render body: 文字列
例
JavaScriptを表示
render body: "raw"
その他
renderを複数使用
説明
renderを複数回呼び出すとエラーになるため、条件分岐した後「and return」で明示的に終了させる
使い方
render オプション and return
ソースコード
表示結果を文字列として取得
説明
表示結果を文字列として取得
使い方
render_to_string(リクエスト.., ブロック引数)
例
render_to_string partial: "user"
ソースコード
URLを指定して表示
説明
URLを指定して表示
使い方
redirect_to(オプション={}, レスポンスオプション={})
オプション
オプション | 説明 |
---|---|
:alert | エラーメッセージを表示 |
:notice | 通知用のメッセージを表示 |
:flash | パラメータを使って、一時的に値を保存 |
ステータスコード
シンボル | コード | 説明 |
---|---|---|
:ok | 200 | 成功 |
:created | 201 | リソースの生成に成功 |
:moved_permanently | 301 | リソースが永続的にリダイレクト |
:found | 302 | リソースが一時的にリダイレクト |
:see_other | 303 | リソースが別の場所にある |
:bad_request | 400 | 不正なリクエスト |
:unauthorized | 401 | 未承認 |
:forbidden | 403 | アクセス禁止 |
:not_found | 404 | リソースが存在しない |
:method_not_allowed | 405 | HTMLメソッドが許可されていない |
:internal_server_error | 500 | 内部サーバエラー |
例
指定したページにリダイレクト
redirect_to action: "show", id: 5
インスタンス変数
redirect_to @post
URL
redirect_to "http://www.rubyonrails.org"
ステータスコード指定
redirect_to post_url(@post), status: 301
エラーメッセージを表示
redirect_to post_url(@post), alert: "Watch it, mister!"
通知メッセージを表示
redirect_to post_url(@post), status: :found, notice: "Pay attention to the road"
flash指定
redirect_to post_url(@post), status: 301, flash: { updated_post_id: @post.id }
ソースコード
バイナリデータを出力
説明
バイナリデータを出力
使い方
send_data(送るデータ, オプション={})
オプション
オプション | 説明 | デフォルト値 |
---|---|---|
:filename | 保存するときに使用するファイル名 | ファイル名 |
:type | コンテントタイプ | application/octet-stream |
:disposition | ファイルをインラインで表示するか、ダウンロードして保存するかブラウザに通知 | attachment |
:status | ステータスコード | 200(:ok) |
例
バイナリデータを出力
send_data buffer
動的に生成
send_data generate_tgz('dir'), filename: 'dir.tgz'
JPEGを表示
send_file '/path/to.jpeg', type: 'image/jpeg', disposition: 'inline'
404を表示
send_file '/path/to/404.html', type: 'text/html; charset=utf-8', status: 404
ソースコード
画像やファイルのダウンロード
説明
指定したパスに存在する画像やファイルを読み込みその内容をクライアントに送信
使い方
send_file(ファイルのパス, オプション={})
オプション
オプション | 説明 | デフォルト値 |
---|---|---|
:filename | ダウンロードするときに使用するファイル名を指定 | ファイル名 |
:type | コンテントタイプ | application/octet-stream |
:disposition | ファイルをインラインで表示するか、ダウンロードして保存するかブラウザに通知 | attachment |
:status | ステータスコード | 200(:ok) |
:url_based_filename | Content-Dispositionヘッダ内のファイルのベース名を使わなくする | false |
:length | 送信されようとしているコンテンツのサイズ | |
:stream | falseの場合、ファイル全体が読み込まれてから表示 | |
:buffer_size | ストリーミングがtrueの時に、1回に送信されるデータ量 | |
:x_sendfile | lighttpdやapacheで利用できるローカルファイル送信用モジュール |
例
指定されたzipファイルをダウンロード
send_file '/path/to.zip'
指定されたPDFをtest.pdfという名前でダウンロード
send_file '/path/test_pdf.pdf', filename: 'test.pdf'
ソースコード
リクエストを送ってきたユーザのヘッダー情報や環境変数を取得
説明
リクエストを送ってきたユーザのヘッダー情報や環境変数を取得
使い方
request.メソッド()
メソッド
メソッド名 | 説明 |
---|---|
GET | |
POST | |
accept_encoding | エンコーディング形式を取得 |
accept_language | 受信可能な言語 |
authority | authorityを取得 |
authorization | 認証情報を取得 |
base_url | URLを取得 |
body | ポストデータを取得 |
content_charset | charsetパラメータを取得 |
content_length | コンテンツサイズを取得 |
content_type | content-typeを取得 |
controller_class | |
controller_class_for | |
cookie_jar | |
cookies | クッキーを取得 |
delete? | HTTPメソッドがDELETEであるか? |
get? | HTTPメソッドがGETであるか? |
head? | HTTPメソッドがHEADであるか? |
host | ホスト名を取得 |
host_with_port | ホスト名とポート番号を取得 |
form_data? | フォームデータがあるか? |
fullpath | リクエストURLを取得 |
headers | リクエストヘッダーの情報取得 |
http_auth_salt | |
ip | IPアドレスを取得 |
link? | HTTPメソッドがLINKであるか? |
key? | 一致するヘッダーがあるか? |
local? | ローカル通信であるか |
logger | |
media_type | メディア対応の取得 |
media_type_params | |
method | HTTPメソッド |
method_symbol | メソッドをシンボルで取得 |
multithread? | |
new | |
original_fullpath | 最後に要求されたパスを取得 |
original_url | 元のリクエストURLを取得 |
options? | |
parseable_data? | |
patch? | HTTPメソッドがPATCHであるか? |
path | |
path_info | |
path_info= | |
port | ポート番号 |
post? | HTTPメソッドがPOSTであるか? |
put? | HTTPメソッドがPUTであるか? |
query_string | クエリ文字(?より後ろの部分) |
referer | |
query_parameters | |
raw_post | リクエスト本文を取得 |
remote_ip | クライアントのipアドレスを取得 |
request_id | X-Request-Idヘッダーを取得 |
request_method | リクエストメソッドを取得 |
request_method_symbol | リクエストメソッドをシンボルで取得 |
request_parameters | |
reset_session | |
scheme | |
script_name | |
script_name= | |
session | |
session_options | |
send_early_hints | |
server_software | 使用しているサーバソフトウェア |
session_options=(options) | |
ssl? | |
trace? | |
trusted_proxy? | |
unlink? | |
url | リクエストのURLを取得 |
user_agent | ユーザエージェントを取得 |
values_at | |
uuid | X-Request-Idヘッダーを取得 |
xhr? | 「X-Requested-With」ヘッダーに「XMLHttpRequest」が含まれているか? |
xml_http_request? | Ajaxによって実行されたものか |
例
リクエストメソッドの取得
request.request_method
リンク先のURLを取得
request.headers[:referer]
すべてのリクエストヘッダを取得
request.headers
ソースコード
応答ステータスとヘッダ情報のみを表示
説明
応答ステータスとヘッダ情報のみを表示
使い方
head(ステータスコード, 応答ヘッダ={})
ステータスコード
シンボル | コード | 説明 |
---|---|---|
:ok | 200 | 成功 |
:created | 201 | リソースの生成に成功 |
:moved_permanently | 301 | リソースが永続的にリダイレクト |
:found | 302 | リソースが一時的にリダイレクト |
:see_other | 303 | リソースが別の場所にある |
:bad_request | 400 | 不正なリクエスト |
:unauthorized | 401 | 未承認 |
:forbidden | 403 | アクセス禁止 |
:not_found | 404 | リソースが存在しない |
:method_not_allowed | 405 | HTMLメソッドが許可されていない |
:internal_server_error | 500 | 内部サーバエラー |
例
応答ステータスとヘッダ情報のみを表示
head :created, location: person_path(@person)
ステータスコード200
head :ok
ステータスコード404
head :not_found
ソースコード
簡単なメッセージを画面に表示
説明
簡単なメッセージを画面に表示
使い方
基本
flash[キー] = 値
flash[:alert]へのアクセッサー
flash.alert()
flash[:notice]へのアクセッサー
flash.notice()
現在のアクションのみ有効
flash.now[キー] = 値
有効期限を1リクエスト増やす
flash.keep(キー)
破棄
flash.discard(キー)
特徴
- 項目追加の成功の有無などユーザへ簡単なメッセージを表示する
- 「アクション->リダイレクト->アクション」の処理が済むと削除される
- ブラウザのクッキーを無効にしている場合は使用できない
例
コントローラ
flash[:notice] = メッセージ
ビュー
h(flash[:notice])
XML形式のデータをハッシュに変換
説明
XML形式のデータをハッシュに変換
使い方
Hash.from_xml(XMLデータ, 禁止された型=nil)
例
Hash.from_xml("<langs><lang>Japanese</lang><lang>English</lang></langs>")
# {"langs"=>{"lang"=>["Japanese", "English"]}}
ソースコード
コントローラのパスを取得
説明
コントローラのパスを取得
使い方
コントローラ名.controller_path
例
MyApp::MyPostsController.controller_path
# "my_app/my_posts"
ソースコード
コントローラのクラス名を取得
説明
コントローラのクラス名を取得
使い方
ActionController::Base.controller_name
例
EntriesController.controller_name
# "entries"
ソースコード
Atomフィードを生成
説明
Atomフィードを生成
使い方
atom_feed(オプション, ブロック引数)
オプション
オプション | 説明 | デフォルト値 |
---|---|---|
:language | 使用する言語 | en-US |
:root_url | フィードを置き換える文章のURL | / |
:url | フィードのURL | 現在のURL |
:id | フィードのid値 | |
:schema_date | スキーマ情報 | 今年 |
:instruct | XMLのハッシュ |
例
Atomフィードを生成
atom_feed do |f|
f.title('新着記事フィード')
f.updated(@pages.last.created_at)
@pages.each do |p|
feed.entry(p, url: p.url, published: p.published, updated: p.updated_at) do |i|
i.title(p,title)
i.content("#{@page.published} 公開")
end
end
end
日本語を指定
atom_feed(language: 'ja-JP') do |f|
f.title('新着記事フィード')
f.updated(@pages.last.created_at)
@pages.each do |p|
feed.entry(p, url: p.url, published: p.published, updated: p.updated_at) do |i|
i.title(p,title)
i.content("#{@page.published} 公開")
end
end
end
ソースコード
キャッシュのポリシーを設定
説明
キャッシュのポリシーを設定
使い方
expires_in(有効期限, オプション={})
オプション
オプション | 説明 |
---|---|
:no-cache | キャッシュを無効化 |
:no-store | 返されたデータをキャッシュに記録しない |
:max-age | キャッシュの有効性の再確認をせずに、データに保持できる最大期間 |
:max-stale | 有効期限の切れたデータを許可する |
:min-fresh | 最新のデータを取得する |
:no-transform | メディアタイプを変更しない |
:only-if-cached | キャッシュからデータを取得 |
:cache-extension | トークンを使って拡張 |
:public | キャッシュされたデータを複数ユーザで共有 |
:private | キャッシュされたデータを共有しない |
:must-revalidate | キャッシュの有効期間を必ず問い合わせる |
:proxy-revalidate | プロキシサーバにキャッシュの有効性を確認 |
:s-maxage | 基本的な機能は、max-ageと同じ。ただし、こちらは共有キャッシュにだけ適用される |
:stale_while_revalidate | stale_while_revalidate |
:stale_if_error | stale_if_error |
例
キャッシュの有効期限を20分
expires_in 20.minutes
キャッシュを共有
expires_in 20.minutes, public: true
ソースコード
ログを出力
説明
ログファイルなどに出力
使い方
logger.ログレベル(値)
ログレベル
ログレベル | 説明 |
---|---|
unknown(値) | 不明なエラー |
fatal(値) | 致命的なエラー |
error(値) | エラー |
warn(値) | 警告 |
info(値) | 通知 |
debug(値) | デバック情報 |
例
致命的なエラー
logger.fatal('致命的なエラーです')
キャッシュの無効化
説明
キャッシュの無効化
使い方
expires_now()
例
キャッシュの無効化
expires_now
ソースコード
デフォルトのURLにマッピング
説明
デフォルトのURLにマッピング
使い方
url_options()
例
url_options
ソースコード
フラッシュメッセージのタイプを指定
説明
フラッシュメッセージのタイプを指定
フラッシュメッセージとは、エラー時などにページ上部に表示されるメッセージ
使い方
add_flash_types(タイプ名..)
例
フラッシュメッセージのタイプを指定
add_flash_types :warning
複数指定
add_flash_types :success, :info, :warning, :danger
ソースコード
直前のページにリダイレクト
説明
直前のページにリダイレクト
使い方
redirect_back(fallback_location: HTTP_REFERERが設定されていない場合のリダイレクト先, allow_other_host: 許可されたHost=_allow_other_host, 引数..)
オプション
オプション | 説明 | デフォルト値 |
---|---|---|
:allow_other_host | 異なるホストへのリダイレクトを許可するか | true |
例
直前のページにリダイレクト
redirect_back fallback_location: { action: "show", id: 5 }
インスタンス変数
redirect_back fallback_location: @post
URL
redirect_back fallback_location: "http://www.rubyonrails.org"
異なるホストへのリダイレクト
redirect_back fallback_location: '/', allow_other_host: false
補足
- Rails5.1以前は「redirect_to :back」
ソースコード
直前のページにリダイレクトしなければ指定したページへリダイレクト
説明
直前のページにリダイレクトしなければ指定したページへリダイレクト
使い方
redirect_back_or_to(fallback_location, allow_other_host: 異なるホストへのリダイレクトを許可するか=_allow_other_host, オプション引数)
オプション
オプション | 説明 |
---|---|
:alert | エラーメッセージを表示 |
:notice | 通知用のメッセージを表示 |
:flash | パラメータを使って、一時的に値を保存 |
例
actionで指定
redirect_back_or_to({ action: "show", id: 5 })
URLで指定
redirect_back_or_to "http://www.rubyonrails.org"
相対パスで指定
redirect_back_or_to "/images/screenshot.jpg"
異なるホストへのリダイレクトを許可しない
edirect_back_or_to '/', allow_other_host: false
ソースコード
リクエストで指定されたフォーマットに合わせて出力
説明
リクエストで指定されたフォーマットに合わせて出力
使い方
respond_to(mimes..)
例
respond_to do |format|
format.html
format.js
format.xml { render xml: @people }
end
ソースコード
Basic認証
説明
Basic認証
使い方
http_basic_authenticate_with(name: 名前, password: パスワード, realm: 認証が必要がエリア名=nil, オプション引数)
例
http_basic_authenticate_with name: ENV['BASIC_AUTH_USERNAME'], password: ENV['BASIC_AUTH_PASSWORD'] if Rails.env == 'staging'
ソースコード
CSRF対策の設定
説明
CSRF対策の設定
使い方
protect_from_forgery(オプション={})
オプション
オプション | 説明 |
---|---|
:only | 実行するアクション |
:except | 実行しないアクション |
:if | 実行する条件を指定 |
:unless | 実行されない条件を指定 |
:prepend | |
:with |
例
CSRF対策の設定
protect_from_forgery except: :index
CSRF対策の設定
protect_from_forgery with: :exception
ソースコード
CSRF対策の設定をオフ
説明
CSRF対策の設定をオフ
使い方
skip_forgery_protection(オプション={})
オプション
名前 | 説明 |
---|---|
:only/:except | 偽造防止機能をアクションのサブセットにのみ適用 |
:if/:unless | 条件に応じて偽装防止機能を完全にオフ |
:prepend | 事前に実行 |
:with | 検証されていないリクエストを処理する方法 |
:exception | 例外を発生 |
:reset_session | セッションをリセット |
:null_session | リクエスト時に空のセッション |
例
skip_before_action :verify_authenticity_token
ソースコード
EtagとLast-Modifiedをレスポンスヘッダに付与
説明
レスポンスにetagとlast_modifiedを設定してリクエストが新しい場合は「304 Not Modified」レスポンスを表示
使い方
fresh_when(オブジェクト), etag: ETag=nil, weak_etag: 弱いETag=nil, strong_etag: 強いETag=nil, last_modified: 最終更新日のバリデータを設定=nil, public: キャッシュ可能にしたいか=false, cache_control: Cache-Controlヘッダー={}, template: テンプレート=nil)
例
リクエストが新しい場合は「304 Not Modified」レスポンスを表示
@article = Article.find(params[:id])
fresh_when(@article)
last_modifiedを指定
@article = Article.find(params[:id])
fresh_when(etag: @article, last_modified: @article.updated_at, public: true)
cache_controlを指定
@article = Article.find(params[:id])
fresh_when(@article, public: true, cache_control: { no_cache: true })
templateを指定
@article = Article.find(params[:id])
fresh_when(@article, template: 'widgets/show')
ソースコード
ブラウザなどでのキャッシュを無期限
説明
ブラウザなどでのキャッシュを無期限
使い方
http_cache_forever(public: プロキシがレスポンスをキャッシュすることを許可するか=false)
例
http_cache_forever(public: true)
ソースコード
HTTP1.1のCache-Controlヘッダにno-storeを設定
説明
HTTP1.1のCache-Controlヘッダにno-storeを設定
使い方
no_store()
例
no_store()
ソースコード
EtagとLast-Modifiedからリクエストが古いかチェック
説明
EtagとLast-Modifiedからリクエストが古いかチェック
使い方
stale?(オブジェクト=nil, **freshness_kwargs)
例
@article = Article.find(params[:id])
stale?(etag: @article, last_modified: @article.updated_at)
ソースコード
アクションのパラメータのエンコーディングを指定
説明
アクションのパラメータのエンコーディングを指定
使い方
param_encoding(アクション名, パラメータ, エンコードの種類)
例
param_encoding :show, :file_path, Encoding::ASCII_8BIT
ソースコード
アクションのエンコーディングにASCII-8BITを指定
説明
アクションのエンコーディングにASCII-8BITを指定
使い方
skip_parameter_encoding(アクション名)
例
skip_parameter_encoding :show
ソースコード
ストリームをブラウザに送信
説明
ストリームをブラウザに送信
使い方
send_stream(filename: ファイル名, disposition: インラインで表示するかダウンロードするか='attachment', type: HTTPコンテンツタイプ=nil)
例
send_stream(filename: "subscribers.csv") do |stream|
stream.write "email_address,updated_at\n"
@subscribers.find_each do |subscriber|
stream.write "#{subscriber.email_address},#{subscriber.updated_at}\n"
end
end
ソースコード
ETagを生成
説明
ETagを生成
使い方
etag(情報)
例
class InvoicesController < ApplicationController
etag { current_user&.id }
def show
# Etag will differ even for the same invoice when it's viewed by a different current_user
@invoice = Invoice.find(params[:id])
fresh_when etag: @invoice
end
end
ソースコード
コントローラの属性に対するヘルパーアクセサを宣言
説明
コントローラの属性に対するヘルパーアクセサを宣言
使い方
helper_attr(属性..)
例
attr_accessor :name
helper_attr :name
ソースコード
指定されたパスに含まれるヘルパー名のリスト
説明
指定されたパスに含まれるヘルパー名のリスト
使い方
all_helpers_from_path(パス)
例
ActionController::Base.all_helpers_from_path 'app/helpers'
#=> ["application", "chart", "rubygems"]
ソースコード
リクエストごとに異なるログレベルを設定
説明
リクエストごとに異なるログレベルを設定
使い方
log_at(ログレベル, オプション引数)
例
# Use the debug log level if a particular cookie is set.
class ApplicationController < ActionController::Base
log_at :debug, if: -> { cookies[:debug] }
end
ソースコード
ParamsWrapperが属性名を決定するために使用するモデルを設定
説明
ParamsWrapperが属性名を決定するために使用するモデルを設定
使い方
wrap_parameters(属性やモデルなど, オプション={})
オプション
名前 | 説明 |
---|---|
:format | 有効になるフォーマットのリスト |
:include | ハッシュにラップする属性名のリスト |
:exclude | ネストされたハッシュから除外する属性名のリスト |
例
XMLフォーマットのパラメータラッパーを有効
wrap_parameters format: :xml
ハッシュにラップ
wrap_parameters :person
include指定
wrap_parameters include: [:username, :title]
ソースコード
コントローラのアクション内で呼び出し可能な_renderersに名前を付けてレンダラーを追加
説明
コントローラのアクション内で呼び出し可能な_renderersに名前を付けてレンダラーを追加
使い方
use_renderers(引数..)
例
class MetalRenderingController < ActionController::Metal
include AbstractController::Rendering
include ActionController::Rendering
include ActionController::Renderers
use_renderers :json
def show
render json: record
end
end
ソースコード
一度だけ使用される時間を使ったMD5を生成
説明
一度だけ使用される時間を使ったMD5を生成
使い方
nonce(シークレットキー, 時間(Time.now))