我有 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 %>
当表单呈现时,有多个“更新”按钮 - 每张照片一个。我也无法在更新照片的 features_status 的同时提交 @profile.bio 更改。
理想情况下,我希望隐藏这些照片更新按钮中的每一个,并且只有一个提交按钮来更新个人资料 bio:text 并呈现@profile。
同时,我希望 photo.featured_status 在复选框被标记后立即变为真/假。(也许使用Javascript?)
任何建议都非常感谢。