在Ruby on Rails中,具有多对多关系(HABTM)的表单设置可以通过以下步骤实现:
Post
和Tag
两个模型,那么您需要在post.rb
和tag.rb
文件中定义这种关系:# post.rb
class Post< ApplicationRecord
has_and_belongs_to_many :tags
end
# tag.rb
class Tag< ApplicationRecord
has_and_belongs_to_many :posts
end
posts_tags
,并在db/migrate
目录下创建一个新的迁移文件:rails generate migration CreatePostsTagsJoinTable post:references tag:references
rails db:migrate
posts_controller.rb
中,添加tags
参数以允许多选:def post_params
params.require(:post).permit(:title, :content, tag_ids: [])
end
posts/_form.html.erb
中,使用collection_check_boxes
或collection_select
辅助方法创建具有多个选择标记的表单:<%= form_with(model: post, local: true) do |form| %>
<!-- 其他表单字段 -->
<%= form.label :tag_ids, 'Tags' %>
<%= form.collection_check_boxes :tag_ids, Tag.all, :id, :name do |tag| %>
<%= tag.label(class: 'checkbox-inline') do %>
<%= tag.check_box(class: 'form-check-input') %>
<%= tag.text %>
<% end %>
<% end %>
<%= form.submit %>
<% end %>
posts_controller.rb
的create
和update
操作中,确保包含tags
参数:def create
@post = Post.new(post_params)
# ...
end
def update
@post.assign_attributes(post_params)
# ...
end
现在,您应该能够在表单中设置具有HABTM关系的多个选择标记。请注意,这个答案是基于Ruby on Rails框架的,不涉及任何云计算品牌。
领取专属 10元无门槛券
手把手带您无忧上云