假設有一個 Controller 叫做 imgur
,大概是這樣:
rails g scaffold imgur pictures
而 Controller 內的 params 只允許傳遞 pictures 陣列:
def imgur_params
params.require(:imgur).permit(pictures: [])
end
一個最基本的檔案上傳表單長這樣:
<%= form_for(imgur) do |f| %>
<%= f.file_field :pictures %>
<%= f.submit %>
<% end %>
會因為 pictures 只吃陣列的關係,就傳不進去。如果想要上傳多個檔案,要加上 multiple: true
:
<%= form_for(imgur) do |f| %>
<%= f.file_field :pictures, multiple: true %>
<%= f.submit %>
<% end %>
可以使用多個 f.file_field 來做上傳:
<%= form_for(imgur) do |f| %>
<%= f.file_field :pictures, multiple: true %>
<%= f.file_field :pictures, multiple: true %>
<%= f.submit %>
<% end %>
如果想要改用 file_field_tag
的話,就必須在 form_for
加上 multipart: true
:
<%= form_for(imgur, html: { multipart: true }) do |f| %>
<%= file_field_tag "imgur[pictures][]" %>
<%= f.submit %>
<% end %>
加上 [] 之後,即使只傳一個檔也能通過 params.permit
。
如果想要多檔上傳:
<%= form_for(imgur, html: { multipart: true }) do |f| %>
<%= file_field_tag "imgur[pictures][]", multiple: true %>
<%= f.submit %>
<% end %>
也可以這樣:
<%= form_for(imgur, html: { multipart: true }) do |f| %>
<%= file_field_tag "imgur[pictures][]" %>
<%= file_field_tag "imgur[pictures][]" %>
<%= f.submit %>
<% end %>
或者這樣:
<%= form_for(imgur, html: { multipart: true }) do |f| %>
<%= file_field_tag "imgur[pictures][]", multiple: true %>
<%= file_field_tag "imgur[pictures][]", multiple: true %>
<%= f.submit %>
<% end %>
沒有留言:
張貼留言