Rails 'grouped_options_for_select' 编辑无效
Rails 'grouped_options_for_select' edit not working
我的模型
Class Person
belongs_to :job, class: "Job"
end
Class Job
has_ancestry orphan_strategy: :adopt
end
在我看来
= form.select(:job_id, Job.all.map { |job| [job.name.titleize, job.id] }, {prompt: 'Job'}, {:class => 'form-control'})
当我在没有 grouped_options_for_select 的情况下使用时,它工作正常。我在更新记录时获取数据。但是我的 select 选项没有正确列出
= form.select :job_id, grouped_options_for_select(Job.roots.map { |parent| [parent.name, parent.children.map { |c| [c.name, c.id]}] }), {prompt: 'Select'}, {class: "form-control"}
但是当我用这个'grouped_options_for_select'更新记录的时候。作业 ID 没有出现在我的 select 选项中
output
Parent1
child1 <----this is in the select option
child2 <----this is in the select option
Parent2
child1 <----this is in the select option
child2 <----this is in the select option
例如,我要编辑一份有 Parent2<
当我加载作业记录时,我的 select 没有获得正确的记录。
select 框总是获得第一个 select 选项
检查您的型号。对吗?
Job.roots.map { |parent| [parent.name, parent.children.map { |c| [c.name, c.id]}] }
至
[
["Teacher", [["Physics", 2], ["Math", 3]]],
["programmer", [["junior", 5], ["senior", 6]]]
]
但我认为 select 的选项不需要 Person。
它是带有 select 框的表单的片段。
<%= form_for :form do |f| %>
<%= f.select(
"job_id",
grouped_options_for_select(
Job.roots.map { |parent| [
parent.name,
parent.children.map { |child| [child.id, child.name] }
] }
),
{prompt: "Select"},
{class: "form-control"}
)
%>
<% end %>
你想要的是select,对吧?
<select name="form[job_id]" id="form_job_id">
<option value="">Select</option>
<optgroup label="Teacher">
<option value="2">Physics</option>
<option value="3">Math</option>
</optgroup>
<optgroup label="programmer">
<option value="5">junior</option>
<option value="6">senior</option>
</optgroup>
</select>
更新答案
当你第一次 select 'Physics' 选项时
grouped_options_for_select(
Job.roots.map { |parent| [
parent.name,
parent.children.map { |child| [child.id, child.name] }
] },
2 <-- add selected_params value by N
)
- 没有grouped_options_for_select
您在这里使用 Job.all
您显示的是所有职位,即 parents
和 childern
。
- 和grouped_options_for_select
你在这里使用 Job.roots
然后 parent.children
基本上你只显示 `childern.
为了同时显示 parent
和 children
以及正确的列表,您必须在 grouped_options_for_select
第二个参数中添加父数组。
= form.select :job_id,
grouped_options_for_select(
Job.roots.map { |parent|
[
parent.name,
[parent.name, parent.id] + parent.children.map { |c| [c.name, c.id]}
]
}
),
{prompt: 'Select'},
{class: "form-control"}
注意:- 注意 [parent.name, parent.id] +
。
我的模型
Class Person
belongs_to :job, class: "Job"
end
Class Job
has_ancestry orphan_strategy: :adopt
end
在我看来
= form.select(:job_id, Job.all.map { |job| [job.name.titleize, job.id] }, {prompt: 'Job'}, {:class => 'form-control'})
当我在没有 grouped_options_for_select 的情况下使用时,它工作正常。我在更新记录时获取数据。但是我的 select 选项没有正确列出
= form.select :job_id, grouped_options_for_select(Job.roots.map { |parent| [parent.name, parent.children.map { |c| [c.name, c.id]}] }), {prompt: 'Select'}, {class: "form-control"}
但是当我用这个'grouped_options_for_select'更新记录的时候。作业 ID 没有出现在我的 select 选项中
output
Parent1
child1 <----this is in the select option
child2 <----this is in the select option
Parent2
child1 <----this is in the select option
child2 <----this is in the select option
例如,我要编辑一份有 Parent2< 当我加载作业记录时,我的 select 没有获得正确的记录。 select 框总是获得第一个 select 选项
检查您的型号。对吗?
Job.roots.map { |parent| [parent.name, parent.children.map { |c| [c.name, c.id]}] }
至
[
["Teacher", [["Physics", 2], ["Math", 3]]],
["programmer", [["junior", 5], ["senior", 6]]]
]
但我认为 select 的选项不需要 Person。
它是带有 select 框的表单的片段。
<%= form_for :form do |f| %>
<%= f.select(
"job_id",
grouped_options_for_select(
Job.roots.map { |parent| [
parent.name,
parent.children.map { |child| [child.id, child.name] }
] }
),
{prompt: "Select"},
{class: "form-control"}
)
%>
<% end %>
你想要的是select,对吧?
<select name="form[job_id]" id="form_job_id">
<option value="">Select</option>
<optgroup label="Teacher">
<option value="2">Physics</option>
<option value="3">Math</option>
</optgroup>
<optgroup label="programmer">
<option value="5">junior</option>
<option value="6">senior</option>
</optgroup>
</select>
更新答案
当你第一次 select 'Physics' 选项时
grouped_options_for_select(
Job.roots.map { |parent| [
parent.name,
parent.children.map { |child| [child.id, child.name] }
] },
2 <-- add selected_params value by N
)
- 没有grouped_options_for_select
您在这里使用 Job.all
您显示的是所有职位,即 parents
和 childern
。
- 和grouped_options_for_select
你在这里使用 Job.roots
然后 parent.children
基本上你只显示 `childern.
为了同时显示 parent
和 children
以及正确的列表,您必须在 grouped_options_for_select
第二个参数中添加父数组。
= form.select :job_id,
grouped_options_for_select(
Job.roots.map { |parent|
[
parent.name,
[parent.name, parent.id] + parent.children.map { |c| [c.name, c.id]}
]
}
),
{prompt: 'Select'},
{class: "form-control"}
注意:- 注意 [parent.name, parent.id] +
。