以下の説明で使うサンプル
Book
モデルの scaffold
を生成する。
$ rails g scaffold Book title:string author:string
ビュー内でコントローラーを取得する
アクセッサーメソッド controller
を使って、app/views/books/index.html.erb
内でコントローラーの情報にアクセスする。
コントローラー名を取得する。
<%= controller.controller_name %> # => "books"
モデル名を取得する。
<%= controller.controller_name.classify %> # => "Book"
アクション名を取得する。
<%= controller.action_name %> # => "index"
参考:
controller_name | Rails ドキュメント (railsdoc.com)
View から Controller 名や Action 名を参照する方法 – Qiita
Rails で Controller や Action を取得したい時に使えるメソッド | とりあえず null
View やヘルパーや Controller において、コントローラ名やアクション名で条件分岐する方法 – Qiita
Rails の現在のコントローラ名・アクション名を調べる方法 | 人と情報
controller_name (instance method) – ActionController::Metal | Ruby on Rails API [Official]
controller_name (class method) – ActionController::Metal | Ruby on Rails API [Official]
controller_path (instance method) – AbstractController::Base | Ruby on Rails API [Official]
controller_path (class method) – AbstractController::Base | Ruby on Rails API [Official]
controller – rails/controller_helper.rb at v5.2.3 · rails/rails – GitHub
モデルを取得して操作する
constantize
でモデルのクラス (定数) を取得する。
object_model = controller.controller_name.classify.constantize new_book = object_model.new book_1 = object_model.find(1) book_one = object_model.first
エンジンの場合
const_get
でモデルのクラス (定数) を取得する。
object_model = MyEngine.const_get(controller.controller_name.classify) new_book = object_model.new book_1 = object_model.find(1) book_one = object_model.first
モデル名・アトリビュート名を翻訳する
翻訳ファイル config/locales/book_ja.yml
を作成する。
ja: activerecord: models: book: 本 attributes: book: title: タイトル author: 著者
エンジンで使う場合は翻訳ファイル内でモデル名に名前空間を付ける。
ja: activerecord: models: my_engine/book: 本 attributes: my_engine/book: title: タイトル author: 著者
モデル名の翻訳
model_name.human
を使ってモデル名の翻訳を取得する。
<%= Book.model_name.human %> # => "本"
アトリビュート名の翻訳
human_attribute_name
を使ってアトリビュートの翻訳を取得する。
<%= Book.human_attribute_name(:title) %> # => "タイトル" <%= Book.human_attribute_name(:author) %> # => "著者"
参考:
Model.model_name.human と Model.human_attribute_name – Qiita
ネストしたモデルで human_attribute_name を使う – Qiita
Rails でコントローラー名からモデル名を求めたりしたい、逆もまた | 俺の備忘録
ActiveModel::Naming | Ruby on Rails API [Official]
ActiveModel::Name | Ruby on Rails API [Official]
human_attribute_name – ActiveModel::Translation | Ruby on Rails API [Official]
How can I translate model and attribute names of an Rails Engine? – Stack Overflow