Ruby on rails 获取要用作回形针文件名的表单值
是否可以获取表单字段值并将其用作回形针附件文件名Ruby on rails 获取要用作回形针文件名的表单值,ruby-on-rails,paperclip,Ruby On Rails,Paperclip,是否可以获取表单字段值并将其用作回形针附件文件名 PiecePhoto型号: belongs_to :piece has_attached_file :image, :styles => { :slider => "940x420#", :single => "540>", :thumb => "60x60#", :medium => "140x140#", :origi
PiecePhoto
型号:
belongs_to :piece
has_attached_file :image,
:styles => {
:slider => "940x420#",
:single => "540>",
:thumb => "60x60#",
:medium => "140x140#",
:original => "1024x1024>"
},
:path => ":attachment/:id/:style/:filename",
:url => ":attachment/:id/:style/:filename",
:storage => :s3,
:bucket => 'monavala',
:s3_credentials =>"#{Rails.root}/config/s3.yml"
validates_presence_of :image
before_post_process :parameterize_file_name
def parameterize_file_name
extension = File.extname(image_file_name).gsub(/^\.+/, '')
filename = File.basename(image_file_name, ".#{extension}").parameterize
self.image.instance_write(:file_name, "#{filename}.#{extension}")
end
在filename=File.basename(image_File_name,“.#{extension}”)中,参数化
我希望从表单字段获取值,而不是image_File_name
编辑:
模型是嵌套的
Piece
has_many :piece_photos
accepts_nested_attributes_for :piece_photos
PiecePhotos
belongs_to :piece
has_attached_file :image
我知道在模型中获取表单值打破了MVC模式。还有别的办法吗
Edit2:
我试图在这里严格一点,但我想我得再解释一下
表单是嵌套的,我有集合表单,它:有许多片段:有许多片段照片
可以为片段
添加字段,并且可以为每个片段
添加片段照片
我希望PiecePhotos
的文件名与Piece
name+一些唯一的字符串或id相同
所以一切都必须在一个帖子里完成。我不想先上传单张照片,然后再将它们添加到单张中
基本上,我所需要的就是获得工件名称并将其用作工件照片文件名
这张图片显示的是表单现在的样子,它仍在开发中
您可以在模型中使用params[:paramHere]
,但这并不是最佳实践,因此在使用它时,首先创建一个副本,这样您就不会更改任何内容
params_copy = params.dup
....
filename = params[:attachment_name]
编辑:
更好的选择是将文件名代码移动到piecepotocontroller
比如:
def create
@piece_photo = PiecePhotos.new
@piece_photo.file_attachment_name = params[:file_attachment_name]
unless @piece_photo.save do
#error-handling
end
end
或者,如果要更改现有记录上的文件\u附件\u名称
,则可以将代码放入其他方法中,因此可以使用名为更改附件\u文件名
或其他方法
Edit2:
但即使是之前的替代品也不需要,因为回形针非常简单,这就足够了:
这是您的表单(显然它可能还有一些字段):
或
看看这个或官方的问题。我知道这是一个老问题,但我这周遇到了同样的问题,最后终于解决了,所以我想我会回答,以防其他人遇到同样的问题
基本上,曲别针能够通过插值()使用动态路径。要做到这一点,您只需在模型顶部添加插值代码
照片模型:
Paperclip.interpolates :fixed_file_name do |attachment, style|
attachment.instance.fixed_file_name
end
现在,您可以在url末尾添加:fixed_file_name
或任何您想调用的名称。请务必添加:扩展名
,否则文件将不带扩展名保存。它会自动对上传的文件使用相同的扩展名,因此不会出现任何问题
:path => ":attachment/:id/:style/:fixed_file_name.:extension",
:url => ":attachment/:id/:style/:fixed_file_name.extension",
然后你所要做的就是定义它。您甚至可以使用rails。参数化。只需放置{image\u file\u name}
或任何字段名,然后添加.parameterize
def fixed_file_name
return "#{image_file_name.parameterize}"
end
我承认我只在Rails 4.2上测试过这个,因为我使用的是Rails 4.2,但是我在经历了很多挫折之后才能够让它工作。我得到了未定义的局部变量或方法params'`。我没有提到模型是嵌套的。谢谢更新。我为我的问题增加了更多的细节。我喜欢使用另一种方法,但仍然存在一个问题,我必须先上传照片,然后将它们与照片关联起来。
Paperclip.interpolates :fixed_file_name do |attachment, style|
attachment.instance.fixed_file_name
end
:path => ":attachment/:id/:style/:fixed_file_name.:extension",
:url => ":attachment/:id/:style/:fixed_file_name.extension",
def fixed_file_name
return "#{image_file_name.parameterize}"
end