2017-01-29 45 views
0

我很难过。我有一个任务仪表板应该列出任务的索引(@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所需的任何解决方案复制到该解决方案中。谢谢你的帮助!

回答

0

我认为你要找的是includes方法。

您可以用这种方式查询所有的任务关联。

@tasks = Task.includes(:task_products, :store_order) 

可以接取比每个任务的任务的产品和卖场为了像@userFriendly的帮助,所以

task = @task.first 
# get all associated task products 
task.task_products 
# get store order 
task.store_order 
# iterate all tasks 
@tasks.each do |task| 
    #iterate all task_products 
    task.task_products.each do |task_product| 
    end 
    #iterate store order 
    task.store_order do |store_order| 
    end 
end 
+0

谢谢!我用这种方法做了一个测试,并设法用一些代码清理了一下表格,但我仍然需要能够将多个任务及其嵌套关联检索为表格格式。这种方法似乎只适用于选择单个任务ID? –

+0

@TylerP看到我的编辑 – userFriendly

+0

再次感谢@userFriendly。仍然是初学者,所以对于另外一个问题表示歉意。我们快到了!我得到了表格,以正确显示每个任务的每个task_product id,以及每个store_order id,但是我需要将这些id关联到另一个非关联的表。每个task_product都有一个与我的Items表中的项目相关的product_id(如我在原始视图文件中所看到的那样)。任何想法如何将我的视图中的product_id转换为Item值?我尝试在'task.task_products.each do'内添加一个'@item'数据库调用,但只返回表中的最后一个值。 –