Rails with Paperclip忽略空附件。

5

我正在使用rails的paperclip插件,它运行良好。然而我的问题是,当更新记录时,如果我没有重新选择图片,则会将记录保存为空值。以下是我的代码:

<div class="form-group">
  <div class="media">
    <%= image_tag program_avatar(b), :id => 'avatar', :class => 'thumbnail media-object pull-left', :height => 100, :width => 100 %>
    <div class="media-body padding-top-40">
      <%= b.file_field :avatar, :class => 'file-upload' %>
    </div>
  </div>
</div>

<div class="form-group">
  <div class="media">
    <%= image_tag program_banner(b), :class => 'thumbnail media-object pull-left', :height => 100, :width => 300 %>
    <div class="media-body padding-top-40">
      <%= b.file_field :banner, :class => 'file-upload' %>
    </div>
  </div>
</div>

以及控制器:

respond_to do |format|
  if @program.update(program_params)
    format.html { redirect_to(program_path(@program), :notice => "Program updated") }
    format.js { render :json => @program.json }
  else
    format.html { render :new, :notice => "Error please try again" }
    format.js { render :json => "Error please try again" }
  end
end

模型:
书籍模型:
has_one :book_content, :dependent => :destroy  
accepts_nested_attributes_for :book_content, :allow_destroy => true

图书内容模型:

has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png"
has_attached_file :banner, :styles => { :header => "600x150", :setting => "300x100"  }, :default_url => "/images/:style/found.jpeg"
belongs_to :book

这是一个嵌套表单,但由于它有多个附件,所以我不能使用reject_if

如何告诉Paperclip如果没有选择文件则保留原始文件?

谢谢


你的模型的相关部分是什么样子的?例如,模型本身、它的关联以及关联的模型,调用has_attachment - Chris Peters
@ChrisPeters - 已将模型添加到问题中。 - Wahtever
1个回答

4

在进行一些研究后,我发现我的问题是没有将id传递给参数,因此我有了以下代码:

params.require(:book).permit(:book_name, book_content_attributes: [:media, :rating, :book_id])

将其更改为:

params.require(:book).permit(:book_name, book_content_attributes: [:id, :media, :rating, :book_id])

请注意添加了:id,现在它可以正常工作。

1
哇!这就是我昨天整天在找的东西!!谢谢你!!你让我的一天都变得美好了! - aprok
我有一个问题要问你。在我的_form.html.erb中,我有 <%= f.link_to_add "添加图片", :poster_images %>。每次我尝试编辑我的海报时,我都会得到太多的添加图片链接,因为我现有的海报中有很多图片。有什么想法可以解决这个问题吗? - aprok
@ArseniiProhorchik - 尝试将 link_to_add 移到 fields_for 块之外,但仍在主表单内。 - Wahtever
它还在那里...在编辑海报时仍然默认显示。 - aprok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接