【问题标题】:Rails 'grouped_options_for_select' edit not workingRails 'grouped_options_for_select' 编辑不起作用
【发布时间】:2020-08-19 01:28:02
【问题描述】:

我的模型

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 时,它工作正常。我在更新记录时得到数据。但我的选择选项没有正确列出

= 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 未出现在我的选择选项中

 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 编辑工作记录。

当我加载作业记录时,我的选择没有得到正确的记录。

选择框总是获得第一个选择选项

【问题讨论】:

  • Job.roots.map { |parent| [parent.name, parent.children.map { |c| [c.name, c.id]}] } 的输出是什么?
  • @Luskmo 感谢您的评论,输出就像孩子们在父母名下一样。
  • @Luskmo 我更新我的问题
  • Job.roots.map { |parent| [parent.name, parent.children.map { |c| [c.name, c.id]}] } 是否遵循两种可能的符号之一? apidock.com/rails/ActionView/Helpers/FormOptionsHelper/…
  • @Luskmo grouped_options_for_select 在我的 HTML 中呈现,但当我需要更新时他没有得到我的正确记录

标签: html ruby-on-rails ruby-on-rails-5 ancestry


【解决方案1】:

检查您的型号。对吗?

Job.roots.map { |parent| [parent.name, parent.children.map { |c| [c.name, c.id]}] }

[
    ["Teacher", [["Physics", 2], ["Math", 3]]], 
    ["programmer", [["junior", 5], ["senior", 6]]]
]

但我认为选择的选项不需要 Person。

带有选择框的表单是sn-p。

<%= 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 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>

更新答案

当您第一次选择“物理”选项时

  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 在我的 HTML 中呈现,但在我需要更新时他没有得到我的正确记录
  • 在 grouped_options_for_select 的第二个参数中添加 child.id 是否不起作用?如果您添加 3,则在我的示例中它是选定的数学选项。
  • 如果是这样,问题完全解决了吗?我会为面临同样问题的其他人更新我的答案。
【解决方案2】:

参考grouped_options_for_select

  • 没有 grouped_options_for_select

在这里,您使用的是 Job.all,您正在显示所有工作,即 parentschildern

  • 使用 grouped_options_for_select

在这里你使用Job.roots & 然后parent.children 基本上你只显示`childern。

为了显示parentchildren 的正确列表,您必须在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] +

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 2013-08-18
    • 2014-07-25
    • 1970-01-01
    相关资源
    最近更新 更多