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