集合中有多个 select

Multiple select in collection

我会知道如何允许在我的字段上进行多项选择

我有一个这样的 simple_form 字段

<%= f.input :activity, required: true, autofocus: true, label: "Votre Activité", collection: ["Vente", "Location", "Gestion", "Syndic"] %>

在我的控制器中

devise_parameter_sanitizer.permit(:account_update, keys: [:password, :password_confirmation, :photo, :address, :cover, :activity)

我的模型

validates :activity, inclusion: { in: %w(Vente Location Syndic Gestion),
        message: "%{value} n'est pas un mandat valide"}

我试过了 way 但它不起作用,我认为问题出在 activity 变量类型

app/models/your_model.rb:

class YourModel < ApplicationRecord
  serialize :activity, Array # add this

  # you can't use `inclusion:` validation because it is only for validating a single value
  # so you'll do something like this, or if you want it to clean it a bit by defining a method instead, see here 
  validate do
    unless %w(Vente Location Syndic Gestion).include? activity
      errors.add(:activity, "#{activity} n'est pas un mandat valide"
    end
  end
end

app/views/.../some_view.html.erb:

<%= f.input :activity,
      required: true,
      autofocus: true,
      label: "Votre Activité",
      collection: ["Vente", "Location", "Gestion", "Syndic"],
      input_html: { multiple: true },
      include_hidden: false
%>
  • 我在上面添加了 input_html: { multiple: true },这样 params 将是一个值数组,而不仅仅是一个值

  • 我在上面添加了 include_hidden: false 因为没有它你会得到类似

    ["", "Location", "Syndic"]
    

    它添加了一个空字符串,而不仅仅是..

    ["Location", "Syndic"]
    

app/controllers/some_controller.rb:

devise_parameter_sanitizer.permit(
  :account_update,
  keys: [
    :password,
    :password_confirmation,
    :photo,
    :address,
    :cover,
    activity: [] # change this from :activity
  )

测试工作