app/views/pictures/_form.html.erb
<%= form_for(picture) do |f| %>
<% if picture.errors.any? %>
<div class="alert alert-danger" role="alert">
<h4 class="alert-heading"><%= form_errors_heading(picture) %></h4>
<ul>
<% picture.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<% unless picture.persisted? %>
<div class="form-group">
<%= f.label :image %>
<div class="custom-file">
<%= f.file_field :image, class: 'custom-file-input', accept: 'image/jpeg' %>
<label class="custom-file-label" for="picture_image">Choose file...</label>
</div>
</div>
<% end %>
<div class="form-group">
<%= f.label :description %>
<%= f.text_area :description, placeholder: 'Add a description to your picture', rows: 3, maxlength: Picture::CAPTION_LENGTH_MAX, class: "form-control #{"is-invalid" if picture.errors[:description].any?}" %>
</div>
<div class="form-group">
<%= f.label :album_ids, 'Albums' %>
<%= f.collection_select :album_ids, current_user.albums, :id, :title, { selected: picture.album_ids }, { class: 'form-control', multiple: true } %>
</div>
<div class="form-group">
<%= f.label :privacy_setting %>
<%= f.select :privacy_setting, Picture.privacy_settings.keys.to_a, {}, { class: 'custom-select' } %>
</div>
<% if picture.persisted? %>
<div class="form-check form-group <%= 'd-none' unless picture.protected_setting? %>">
<%= f.check_box :regenerate_secret, class: 'form-check-input' %>
<%= f.label :regenerate_secret, class: 'form-check-label' %>
</div>
<% end %>
<div class="">
<% if picture.persisted? %>
<%= link_to 'Delete', picture, method: :delete, data: { confirm: 'This picture will be deleted, are you sure?' }, class: 'btn btn-link text-danger pull-right', role: 'button' %>
<% else %>
<%= link_to t('.upload_many_pictures'), import_pictures_path, class: 'btn btn-link pull-right px-0', role: 'button' %>
<% end %>
<%= f.submit class: 'btn btn-primary', disabled: picture.new_record? && current_user.balance.negative? %>
</div>
<% end %>