2011年12月25日日曜日

[Rails3] コントローラ名から対応するモデルオブジェクトを取得する

実行環境:
ruby 1.9.3
Rails 3.1.3
コントローラ名からモデル名を取得します。
#{RAILS.ROOT}/app/controllers/users_controller.rb
class UsersController < ActionController::Base
  def index
    @model_name = controller_name.classify           # モデル名の取得
    @all = @model_name.constantize.find(:all)        # モデルオブジェクトの取得
  end
end
コントローラ名を classify するとモデル名が得られます。
モデル名を constantize するとモデルオブジェクトが得られます。

ただし、これは Rails の規約に則って推測しているだけです。
つまり「規約に則って作られていれば対応する名前はこの名前でしょ?」という具合です。 実際にモデルオブジェクトが取得できたかどうかを判定してあげる必要があるかも。

0 件のコメント:

コメントを投稿