Rails,有没有办法默认为file_field提供图像?

时间:2016-06-07 12:40:20

标签: ruby-on-rails

我的文章有一个编辑表格。

每篇文章都有一张图片。

我有当前图像和更改图像部分。

这是我的代码:

<%=form_for @article, url: articles_update_path,remote: true, html: {class: "form-horizontal"} do |f|%>

<fieldset class="content-group">
  <legend class="text-bold">Images</legend>
  <div class="form-group">
    <label class="col-lg-2 text-semibold">Current image:</label>
    <div class="col-lg-10">
      <%= image_tag @article.image_url(:thumb) unless @article.image.blank?%>
    </div>
  </div>
  <div class="form-group">
    <label class="col-lg-2 text-semibold">Change image:</label>
    <div class="col-lg-10">
      <%= f.file_field :image, :class => 'file-input-custom', 'data-show-caption' => true, 'data-show-upload' => false, :accept => 'image/*'%>
    </div>
  </div>
</fieldset>

<% end %>

现在的问题是,如果用户选择编辑文章并且不再提供图像,则没有图像。

我想制作我的编辑表单,以便如果有人不选择图像,则会保存该文章已有的图像。

这可能吗?

2 个答案:

答案 0 :(得分:0)

经过搜索,我发现我所要求的可能是不可能的。 您必须使用JavaScript,或者如果传递的图像为零,则必须检查控制器。

在我的情况下,如果 params [:article] [:image] 为零,我必须检查 article_params

def article_params
    if params[:article][:image]==""
        params.require(:article).permit(:id)
    else
        params.require(:article).permit(:id, :image)
    end
end

答案 1 :(得分:0)

如果您使用gem 'carrierwave'进行图片上传,请尝试此操作.......

您可以通过覆盖default_url中的uploader方法轻松完成此操作:

  def default_url
    # For Rails 3.1+ asset pipeline compatibility:
    # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
    'default.jpg'
  end

并将default.jpg文件放在app / assets / images文件夹中。

你的image_tag看起来像这样.......

<%= image_tag @article.image.url(:thumb) || @article.default_url %>