我很难过。我有一个任务仪表板应该列出任务的索引(@tasks = Task.all),但我无法弄清楚如何在没有记录返回所有任务中的值的情况下调用其关联的嵌套记录。任何想法如何限制嵌套属性的范围只返回其关联任务的值?试图以索引格式呈现嵌套属性的记录
tasks_controller.rb - >
def dashboard
@tasks = Task.all
@taskproduct = TaskProduct.select(:product_id) # .where(:task_id => @tasks.id)
@item = Item.where(:id => @taskproduct)
@storeorders = Storeorder.all
@storeorderid = Storeorder.select(:store_id) # .where(:task_id => @tasks.id)
@store = Store.where(:id => @storeorderid)
end
task.rb - >
class Task < ApplicationRecord
has_one :storeorder, :dependent => :destroy
has_many :task_products
accepts_nested_attributes_for :storeorder, :reject_if => lambda { |a| a[:store_id].blank? }, :allow_destroy => true
accepts_nested_attributes_for :task_products
end
task_product.rb - >
class TaskProduct < ApplicationRecord
belongs_to :task
has_many :items
end
dashboard.html.erb - >
<tbody>
<% @tasks.each do |t| %>
<tr>
<td><%= link_to t.task_name, task_path(id: t.id) %></td>
<!-- PRODUCTS ORDERED -->
<td>
<% @item.each do |i| %>
<p><%= link_to i.item_select, item_path(id: i.id) %></p>
<% end %>
</td>
<td><%= t.notes %></td>
<!-- SHIPPING ADDRESS -->
<% @storeorders.each do |so| %>
<% @store.each do |s| %>
<td>
<p><%= link_to s.store_identifier, store_path(id: s.id) %></p>
<p><%= s.address %></p>
<p><%= s.city %>, <%= s.state %> <%= s.zipcode %></p>
</td>
<% end %>
<td><%= so.po_number %></td>
<% end %>
</tr>
<% end %>
</tbody>
'#.where(:task_id => @ tasks.id)'基本上是我想要完成的,尽管我知道这不是正确的语法。
任务产品表记录了一个item_id,然后我可以使用@item参考,但是,不是从与其关联的task_id中返回任务产品,而是返回表中的所有任务产品。我想我明白为什么会发生这种情况,我只是不知道如何适当地确定它的范围。 Storeorder嵌套属性也发生了同样的情况,但我想我可以将TaskProducts所需的任何解决方案复制到该解决方案中。谢谢你的帮助!
谢谢!我用这种方法做了一个测试,并设法用一些代码清理了一下表格,但我仍然需要能够将多个任务及其嵌套关联检索为表格格式。这种方法似乎只适用于选择单个任务ID? –
@TylerP看到我的编辑 – userFriendly
再次感谢@userFriendly。仍然是初学者,所以对于另外一个问题表示歉意。我们快到了!我得到了表格,以正确显示每个任务的每个task_product id,以及每个store_order id,但是我需要将这些id关联到另一个非关联的表。每个task_product都有一个与我的Items表中的项目相关的product_id(如我在原始视图文件中所看到的那样)。任何想法如何将我的视图中的product_id转换为Item值?我尝试在'task.task_products.each do'内添加一个'@item'数据库调用,但只返回表中的最后一个值。 –