私のモデルは次のとおりです。
class User < ActiveRecord::Base
has_one :info, :class_name => "PostulantInfo"
mount_uploader :curriculum_vitae, DocumentUploader
#...
class PostulantInfo < ActiveRecord::Base
belongs_to :user
has_many :relatives
has_many :studies, :class_name => "HighSchoolStudy", :foreign_key => :postulant_info_id
mount_uploader :marriage_certificate, DocumentUploader
mount_uploader :photo1, FaceImageUploader
mount_uploader :photo2, SideFaceImageUploader
#...
class Relative < ActiveRecord::Base
mount_uploader :birth_certificate, DocumentUploader
#...
class HighSchoolStudy < ActiveRecord::Base
mount_uploader :degree_certificate, DocumentUploader
#...
実際、私はデフォルトの store_dir を持っています:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
したがって、これは次のようなディレクトリ構造を作成しています。
- uploads
- user
- curriculum_vitae
- {user.id}
- {the_file}
-postulant_info
- marriage_certificate
- {postulant_info.id}
- {the_file}
- photo1
- {postulant_info.id}
- {the_file}
- photo2
- {postulant_info.id}
- {the_file}
- and so on...
しかし、私は次のようなものが欲しい:
- uploads
- {user.uuid}
- {all_the_files_for_this_user}
user.uuid
問題は、たとえば のmarriage_certificate
ファイルを保存したいときにを与える方法がわからないことですPostulantInfo
。しばらくwikiを探していましたが、この問題に役立つものを見つけることができませんでした.
考えられる解決策は、ファイルを含む各モデルに uuid 属性を追加し、次に user.uuid をそれぞれにコピーしてデータベースに保存することですが、これはリソースの無駄です。
ややこしい解決策は、モデルなどの親モデルにアクセスして、次のPostulantInfo
ようなことを行うことです。
def store_dir
"uploads/#{model.user.uuid}"
end
しかし、これは次のことを意味します。
- 子孫レベルごとにアップローダーを作成する
- およびに追加
belongs_to :PostulantInfo
します。これらのモデルが親について知っている理由がない場合 (明らかに uuid を知っていることを除いて)Relative
HighSchoolStudy
- ファイルへのリンクをレンダリングするたびに、Rails は uuid を知るために db クエリを作成します。これは、Devise のおかげで既に持っているものです。
current_user.uuid
これを達成するための最良の方法は何ですか?前もって感謝します