【问题标题】:carrierwave deletes user avatar on user profile updatecarrierwave 删除用户资料更新时的用户头像
【发布时间】:2014-06-21 22:29:50
【问题描述】:

用户创建个人资料并上传头像....没关系。但随后用户决定添加更多信息,因此将第二次访问个人资料设置并仅更改一两个文本字段但不更改头像。 但保存更改后头像消失。如果不改变,我希望它留在那里。

验证,如果未选择头像,则参数不允许,似乎没有任何帮助。

编辑:添加一些代码

blog.rb 模型:

mount_uploader :blog_title_img, BlogTitleUploader

blog_title_uploader.rb:

 class BlogTitleUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick

  def extension_white_list
    %w(jpg jpeg gif png)
  end

  storage :file

  kvalita = 90

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{model.id}/#{mounted_as}"
  end

  version :thumb464 do
      process :resize_to_fill => [464,304]
      process :convert => 'jpg'
      process :quality => kvalita
  end

  version :thumb340, from_version: :thumb464  do
      process :resize_to_fill => [340,304]
      process :convert => 'jpg'
      process :quality => kvalita
  end

  version :thumb320, from_version: :thumb464 do
      process :resize_to_fill => [320,200]
      process :convert => 'jpg'
      process :quality => kvalita
  end

  version :thumb288, from_version: :thumb464 do
      process :resize_to_fill => [288,304]
      process :convert => 'jpg'
      process :quality => kvalita
  end

  version :thumb256, from_version: :thumb464 do
      process :resize_to_fill => [256,304]
      process :convert => 'jpg'
      process :quality => kvalita
  end

  version :thumb224, from_version: :thumb464 do
      process :resize_to_fill => [224,304]
      process :convert => 'jpg'
      process :quality => kvalita
  end

  def filename
    "#{secure_token()}.jpg"
  end

  def secure_token(length=16)
    var = :"@#{mounted_as}_secure_token"
    model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.hex(length/2))
  end


end

博客/edit.html.erb:

<%= 

render partial: "shared/editor",
object: @blog,
locals: { 
    backlink: @backlink, 
    title_image: :blog_title_img
}

%>

共享/_editor.html.erb:

<%= form_for editor do |f| %>
    <b>Nadpis</b>
    <br>
    <%= f.text_field :title, class:"nadpis" %>
    <br>
    <b>Link</b>
    <br>
    <%= f.text_field :link, class:"nadpis" %>
    <% if defined?(editor.tags) %>
        <br>
        <b>Tagy</b>
        <br>
        <%= f.text_field :tags, class:"nadpis" %>
    <% end %>
    <br>
    <b>Úvodný text / popis</b>
    <br>
    <%= f.text_area :description, class:"nadpis" %>
    <br>
    <b>Text</b>
    <br>
    <%= f.text_area :text, class:"text" %>
    <br>
    <b>Titulný obrázok</b>
    <br>
    <%= image_tag(editor.send(title_image).thumb320.url) if editor.send(title_image) != nil %>
    <br>
    <%= f.file_field title_image %>
    <br>
    <%= f.hidden_field title_image.to_s + "_cache" %>
    <br>
    <% if defined?(kategorie) #&& z.length > 0
        z = kategorie.reflections[kategorie.reflections.keys.first].active_record.all
        z.each do |ch| %>
            <span>
                <%= check_box "pica", :id, { multiple: true, checked: in_result_set(kategorie, ch) }, ch.id, nil %>
                <%= ch.title %>
            </span>
        <% end %>
        <br>
    <% end %>
    <%= f.radio_button :visible, true %> Publikovať po odoslaní
    <br>
    <%= f.radio_button :visible, false %> Zatiaľ nepublikovať
    <br>
    <br>
    <%= f.hidden_field :typ, value: params[:typ] %>
    <%= f.submit "Uložiť" %>
<% end %>

【问题讨论】:

  • 一些代码会有所帮助。您是安装上传器以进行活动记录还是使用您自己的配置?

标签: ruby-on-rails carrierwave


【解决方案1】:

好的,以后有类似问题的访问者我终于找到了解决方案:

在 blog_title_uploader.rb 中更改:

def filename
    "#{secure_token()}.jpg" 
end

到:

def filename
    "#{secure_token()}.jpg" if original_filename.present?
end

现在页面的行为符合要求。我应该尽快查看控制台输出并分析它在后台做了什么......

从这里获取的解决方案:Carrierwave filename keeps changing on update_attributes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    相关资源
    最近更新 更多