集合中有多个 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"]
- 更多信息here
app/controllers/some_controller.rb:
devise_parameter_sanitizer.permit(
:account_update,
keys: [
:password,
:password_confirmation,
:photo,
:address,
:cover,
activity: [] # change this from :activity
)
测试工作
我会知道如何允许在我的字段上进行多项选择
我有一个这样的 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"]
- 更多信息here
app/controllers/some_controller.rb:
devise_parameter_sanitizer.permit(
:account_update,
keys: [
:password,
:password_confirmation,
:photo,
:address,
:cover,
activity: [] # change this from :activity
)
测试工作