我正在尝试以嵌套形式(使用nested_form)为标签创建00:05:20
属性。有没有办法获得相应for
的{{1}}?
HAML:
id
其他信息:
当前的模型结构类似于f.checkbox
,其中包含许多= label_tag '???', "Set as On", class: primary_btn
= f.check_box :is_on
字段Post
所以我想创建一个嵌套的字段组,如:
Images
答案 0 :(得分:2)
诀窍是使用fields_for
。它为您提供了“范围”表单构建器实例,该实例为嵌套字段创建输入。
= form_for (:post) do |f|
# ... a bunch of fields
= f.fields_for :images do |builder|
= builder.label :is_on, "Set as primary"
= builder.check_box :is_on
但是你的解决方案有一些真正的问题:
post.images
以确保只有一个映像具有is_on
标记。primary_image = post.images.where(is_on: true)
更好的解决方案是在帖子上创建与主图像的特殊关系。
class Post < ActiveRecord::Base
has_many :images
has_one :primary_image, class_name: 'Image'
end
这会将主要图像存储为posts.primary_image_id
中的整数,而不是images
上的布尔标记。
我们可以使用collection_select
来获取选择标记以显示主要图像属性。
= form_for (@post) do |f|
# ... a bunch of fields
= f.fields_for :images do |builder|
# ...
= f.collection_select(:primary_image, @post.images, :id, :name)
从用户体验的角度来看,这确实不是最佳选择。需要javascript的解决方案是为:primary_image
设置一个隐藏字段,并在用户点击复选框时更新其值。如果您不确定如何执行此操作,请创建一个新问题,因为它超出了原始问题的范围。