0

デフォルトでは、 Attach Fuはアップロードされたファイルを に保存し"public/#{table_name}"ます。これを のようなものに変更したいのですが"public/#{table_name}/#{site_id}"site_idはモデルのプロパティです。self.site_id使用してみましたが、両方とも失敗することに注意してください。

has_attachment :storage => :file_system, 
               :max_size => 25.megabytes,
               :path_prefix => "public/#{table_name}/#{site_id}",
               :thumbnails => { 
                 :large => '256x256>', 
                 :medium => '128x128>', 
                 :small => '64x64>' 
               }

「undefined local variable or method site_id」というエラー メッセージが表示されます。#{site_id}コンポーネントを正常に削除する:path_prefixと、initializeメソッドが実行されます。期待通りにアクセスできますsite_id

次のようなinitializeメソッドがあります。

def initialize(site_id = nil)
  super(nil)
  self.site_id ||= site_id
end

次のように、Rails コンソールを介してオブジェクトをインスタンス化します。

r = Resource.new(100)

メソッドはhas_attachment私のメソッドの前に実行されていinitializeますか? :path_prefixモデルがインスタンス化されたときにパラメータを動的に渡すにはどうすればよいですか?

4

1 に答える 1

3

site_idは動的な値であるため、クラスでこれを設定することはできません。モデルで #full_filename を再定義する必要があります。現在の定義は次のようになります。

def full_filename(thumbnail = nil)
  file_system_path = (thumbnail ? thumbnail_class : self).attachment_options[:path_prefix].to_s
  File.join(RAILS_ROOT, file_system_path, *partitioned_path(thumbnail_name_for(thumbnail)))
end

最終行を次のように変更します。

File.join(RAILS_ROOT, file_system_path, site_id.to_s, *partitioned_path(thumbnail_name_for(thumbnail)))
于 2008-10-09T01:28:59.317 に答える