使用:has_many:through
记录关联处理复选框表单是一种在Ruby on Rails中处理多对多关联的方法。它允许您在表单中处理多个复选框,并将这些复选框的值与关联的对象关联起来。以下是如何使用:has_many:through
记录关联处理复选框表单的详细步骤:
User
模型和一个Role
模型,您需要创建一个UserRole
模型,它将充当这两个模型之间的关联。class User< ApplicationRecord
has_many :user_roles
has_many :roles, through: :user_roles
end
class Role< ApplicationRecord
has_many :user_roles
has_many :users, through: :user_roles
end
class UserRole< ApplicationRecord
belongs_to :user
belongs_to :role
end
collection_check_boxes
方法创建复选框表单。例如,在users/_form.html.erb
文件中,您可以添加以下代码:<%= form_with(model: user, local: true) do |form| %>
<!-- 其他表单字段 -->
<div class="field">
<%= form.label :role_ids, 'Roles' %>
<%= form.collection_check_boxes(:role_ids, Role.all, :id, :name) do |b| %>
<%= b.label(class: 'checkbox') { b.check_box + b.text } %>
<% end %>
</div>
<%= form.submit %>
<% end %>
users_controller.rb
文件中,您需要允许role_ids
参数通过user_params
方法。def user_params
params.require(:user).permit(:name, :email, role_ids: [])
end
user_role
表的迁移文件中,您需要添加user_id
和role_id
字段。class CreateUserRoles< ActiveRecord::Migration[6.1]
def change
create_table :user_roles do |t|
t.belongs_to :user, null: false, foreign_key: true
t.belongs_to :role, null: false, foreign_key: true
t.timestamps
end
end
end
现在,您已经成功设置了一个使用:has_many:through
关联处理复选框表单的Ruby on Rails应用程序。这种方法可以轻松处理多对多关联,并允许您在表单中选择多个选项。
领取专属 10元无门槛券
手把手带您无忧上云