У меня есть 3 модели: User
, Profile
и Photo
.
Profile < ApplicationRecord
belongs_to :user
has_many :photos, through: :user
Photo < ApplicationRecord
belongs to :user
User < ApplicationRecord
has_one :profile
has_many :photos
Я хотел бы создать форму для @profile
, которая также отображает флажки для всех связанных с ней фотографий.
Когда фотография отмечена, я бы хотел, чтобы # featured_status
этой фотографии было превращено в TRUE
. (он имеет значение по умолчанию 1 в моей базе данных).
Класс фотографий имеет эти методы
class Photo < ApplicationRecord
belongs_to :user
has_attached_file :image, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png"
validates_attachment_content_type :image, content_type: /\Aimage\/.*\z/
validates :image, :title, :description, presence: true
FEATURED_STATUS = { not_featured: 0, featured: 1 }
def featured?
self.featured_status == FEATURED_STATUS[:featured]
end
def not_featured?
self.featured_status == FEATURED_STATUS[:not_featured]
end
def myPhoto
ActionController::Base.helpers.image_tag("#{image.url(:thumb)}")
end
end
Как я могу построить эту форму?
Я пробовал разные варианты использования fields_for
, collection_check_boxes, check_boxes, и я не могу правильно захватить информацию.
На данный момент это моя форма.
<%= simple_form_for @profile do |f| %>
<%= f.input :bio, input_html: { class: 'form-control'} %>
<section class="main">
<label>Featured Profile Photos</label>
<% @profile.photos.each do |photo| %>
<%= form_for ([@profile, photo]) do |f| %>
<%= f.check_box :featured_status, :checked => (true if photo.featured?) %>
<%= f.submit %>
<% end %>
<label><%= photo.myPhoto %></label>
<% end %>
</section>
<%= f.button :submit %>
Когда форма отображается, имеется несколько кнопок «обновить» - по одной для каждой фотографии. Я также не могу отправить изменения @ profile.bio одновременно с обновлением featured_status фотографии.
В идеале, я бы хотел, чтобы каждая из этих кнопок обновления фотографий была скрыта
и просто есть одна кнопка отправки, которая обновляет текст профиля Bio: и отображает @profile.
В то же время я бы хотел, чтобы photo.featured_status был установлен в true / false, как только флажок отмечен. (Может быть, используя Javascript?)
Любые предложения действительно приветствуются.