以下の説明で使うサンプル

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

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です