【问题标题】:Displaying file field value on edit在编辑时显示文件字段值
【发布时间】:2019-11-04 23:30:04
【问题描述】:

上传图片时,一切正常。 但在编辑时,它不显示文件字段值。只是一个空的 file_field,就像什么都没有。图片标题正确显示。 其他文字为匈牙利语。

_form.html.haml

= simple_nested_form_for(@post) do |f|
  = f.input :title, label: 'Cím'
  = f.input :body, label: "Test"
  = f.fields_for :pics do |pic_form|
    = pic_form.text_field :title
    %br/
    = pic_form.file_field :image
    = pic_form.link_to_remove "Kép Törlése", class: "btn btn-warning"
    %br/
  %br/
  %p= f.link_to_add "Kép hozzáadása", :pics, class: "btn btn-success"
  %br/
  %br/
  = f.submit "Mentés", class: "btn btn-primary"
= javascript_include_tag :defaults, "nested_form"

如何将现有文件传递给file_field?

【问题讨论】:

  • 您希望该字段显示什么?文件路径(在您的服务器上,没有客户端),文件数据?文件名?
  • 是的,文件名会很好。

标签: ruby-on-rails ruby


【解决方案1】:

您必须使用条件来确定文件是否已附加。使用ActiveStorage,条件可能如下所示(对于只接受一个文件的字段):

<% if @my_object.my_file.attached? %>
  <%= @my_object.my_file.blob.filename %>
<% else %>
  <%= f.file_field :my_file %>
<% end %>

如果该字段接受许多文件,则必须迭代以显示文件名:

<% @my_object.my_files.each do |i| %>
  <%= i.filename %><br>
<% end %>

我确信在 Carrierwave 中有相应的方法来处理这个问题。

【讨论】:

    【解决方案2】:

    我猜这是文件字段的默认行为。在编辑特定操作时,文件的 id 存储在文件字段中,而不是其整个值。 在代码中,我可以看到您已经使用了该字段,因此,post 和 pic 之间将建立关系。因此,仔细检查后,您会发现当您单击“提交”按钮时,Rails 会将文件的 id 发送到服务器,这表明不需要上传或处理图片。但是,如果您在文件字段中选择某个文件,那么您可以看到它实际上传文件。 Paperclip gem 也很好地处理了这种处理。

    【讨论】:

    • 我这里用的是 Carriwave gem,我觉得差不多。
    • 是的...您可以使用 JQuery 来确定您是否可以真正做到这一点...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多