その他
    ホーム 技術発信 DoRuby Ruby on Rails でモデルを階層化する(サブディレクトリにモデルを入れる)方法

    Ruby on Rails でモデルを階層化する(サブディレクトリにモデルを入れる)方法

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    通常、モデルのファイルはmodelsディレクトリの直下にファイルを作成しますが、管理の都合など何らかの理由でモデルをサブディレクトリに入れたいことがあると思います。

    例:models/sample/category.rb

    module Sample
      class Category < ActiveRecord::Base
        set_table_name “sample_categories”
      end
    end

    モデルを階層化する(サブディレクトリにモデルを入れる)方法として、environment.rbでconfig.load_paths にサブディレクトリのモデルを追加する方法が色々なブログで紹介されています。

    http://errtheblog.com/posts/3-organize-your-modelshttp://toolmantim.com/articles/keeping_models_in_subdirectorieshttp://www.kevinmonk.co.uk/?p=38

    config.load_paths += Dir[“#{RAILS_ROOT}/app/models/**/**”]

    しかし上記方法で問題が出る場合もあり、さらに簡単な方法で実現できますのでご紹介します。

    サブディレクトリ内のモデルをコントローラ内で利用する際に、::Sample::Category (Sample::Category ではない!) という風に呼び出すことで config.load_paths の追加等をせずに利用することができます。
    Sample::Categoryで呼び出した場合に問題が出る場合がありますので、::Sample::Categoryと先頭に「::」を付けて呼び出すことで問題が直る場合がありますのでお試しください。