ホーム 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と先頭に「::」を付けて呼び出すことで問題が直る場合がありますのでお試しください。

記事を共有

最近人気な記事