如何以 collection_select rails 形式将多个 ID 作为数组传递?
how to pass multiple ids as an array in form collection_select rails?
project
与 stages
和 financial
有 one_to_many 关联
stage
与 task
有 one_to_many 关联
task
与 sub_task
有 one_to_many 关联。
在 Financial#form 视图中,我试图将 id
作为数组传递给 collection_select组合 id,如(例如:-id of stage, id of parent stage. id of task, id of stage.id of task. id of sub_task. id of sub_task)
此外,下拉列表首先访问所有阶段,然后当前场景中的任务是如何像第一阶段那样打开下拉列表,然后是相应的所有任务,然后是所有 sub_tasks?
代码如何识别哪个值来自哪个 table,因为下拉菜单来自多个 table 基于参考
form.html.erb(金融)
<div class="field column large-8">
<br>
<%= form.label :acitivity_Select %>
<%= form.collection_select :cost_head, @project.stages.all+ @project.tasks.all+ @project.sub_tasks.all, :id, :task_name, prompt: true %>
</div>
project.rb
has_many :stages
has_many :tasks, through: :stages
has_many :sub_tasks, through: :tasks
下面是我将如何解决这个问题:
从数据的角度来看,根本不需要获取和呈现阶段和任务,因为您可以通过子任务访问该数据。因此,如果您相应地呈现 select 并将子任务的 ID 存储在数据库中,您将能够从中访问任务和阶段:
<%= form.collection_select :cost_head, @project.sub_tasks, :id, :task_name, prompt: true %>
其他地方:
financial.cost_head.task # => the task
financial.cost_head.task.stage # => the stage
如果您想在 select 中包含 ID 以便于 selection,您可以编写自己的 label_method
,例如像这样:
在 SubTask 模型中:
def full_task_name
"#{task.stage.id}.#{task.id}.#{id} #{task_name}"
end
然后在表格中:
<%= form.collection_select :cost_head, @project.sub_tasks, :id, :full_task_name, prompt: true %>
如果排序已关闭,您可能需要执行以下操作:
在控制器中:
@cost_heads = @project.sub_tasks.includes(task: :stage).order("stages.id ASC, tasks.id ASC, sub_tasks.id ASC")
形式为:
<%= form.collection_select :cost_head, @cost_heads, :id, :full_task_name, prompt: true %>
project
与 stages
和 financial
有 one_to_many 关联
stage
与 task
有 one_to_many 关联
task
与 sub_task
有 one_to_many 关联。
在 Financial#form 视图中,我试图将 id
作为数组传递给 collection_select组合 id,如(例如:-id of stage, id of parent stage. id of task, id of stage.id of task. id of sub_task. id of sub_task)
此外,下拉列表首先访问所有阶段,然后当前场景中的任务是如何像第一阶段那样打开下拉列表,然后是相应的所有任务,然后是所有 sub_tasks?
代码如何识别哪个值来自哪个 table,因为下拉菜单来自多个 table 基于参考
form.html.erb(金融)
<div class="field column large-8">
<br>
<%= form.label :acitivity_Select %>
<%= form.collection_select :cost_head, @project.stages.all+ @project.tasks.all+ @project.sub_tasks.all, :id, :task_name, prompt: true %>
</div>
project.rb
has_many :stages
has_many :tasks, through: :stages
has_many :sub_tasks, through: :tasks
下面是我将如何解决这个问题:
从数据的角度来看,根本不需要获取和呈现阶段和任务,因为您可以通过子任务访问该数据。因此,如果您相应地呈现 select 并将子任务的 ID 存储在数据库中,您将能够从中访问任务和阶段:
<%= form.collection_select :cost_head, @project.sub_tasks, :id, :task_name, prompt: true %>
其他地方:
financial.cost_head.task # => the task
financial.cost_head.task.stage # => the stage
如果您想在 select 中包含 ID 以便于 selection,您可以编写自己的 label_method
,例如像这样:
在 SubTask 模型中:
def full_task_name
"#{task.stage.id}.#{task.id}.#{id} #{task_name}"
end
然后在表格中:
<%= form.collection_select :cost_head, @project.sub_tasks, :id, :full_task_name, prompt: true %>
如果排序已关闭,您可能需要执行以下操作:
在控制器中:
@cost_heads = @project.sub_tasks.includes(task: :stage).order("stages.id ASC, tasks.id ASC, sub_tasks.id ASC")
形式为:
<%= form.collection_select :cost_head, @cost_heads, :id, :full_task_name, prompt: true %>