默认Attachment 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>'
}
我收到“未定义的局部变量或方法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
?
答案 0 :(得分: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)))