2010-08-19 38 views
0

我已经调用的函数从一个类来找到所有与特定ID在一个多对多的关系HABTM项目。循环通过轨道数据对象从控制器

程序 - >任务有一个连接表:procedures_tasks

我喜欢叫@example = Procedure.get_tasks(1,1)

的信息,我想能够通过返回的数据进行迭代这样我可以创建问题

def self.get_tasks(model_id, operating_system_id) 
    find(:first, :select => 'tasks.id, procedures.id', :conditions => ["model_id = ? AND operating_system_id = ?", model_id, operating_system_id], :include => [:tasks]) 
    end 

相关过程中的每个TASK_ID的一个实例,我试图渲染数据,我通常会再使用。每次做| F |在视图层,但我得到:

undefined method `each' for #<Procedure:0x2b879be1db30> 

原题:

我创建一个Rails应用程序来跟踪我们执行的过程。当创建一个进程的新实例时,我想为所有需要执行的任务自动创建行。 表:

  • decommissions
  • 车型
  • operating_systems
  • 程序
  • 任务
  • procedures_tasks
  • host_tasks

程序 - >任务通过procedures_tasks连接表是多对多的。

当你开始一个新的退役过程中您指定的型号和操作系统,型号和操作系统指定遵循的程序

,每道工序都有连接表中的可用任务列表。我想创建一个与host_tasks中的条目相关的每个任务,与正在创建的停用相关的过程。

我已经做了我的头在这个数天,有什么建议?

class Procedure < ActiveRecord::Base 
    has_and_belongs_to_many :tasks 
#has_many :tasks, :through => :procedures_tasks 
# has_many :procedures_tasks 
    belongs_to :model 
    belongs_to :operating_system 
    validates_presence_of :name 
    validates_presence_of :operating_system_id 
    validates_presence_of :model_id 

    def self.get_tasks(model_id, operating_system_id) 
    find(:first, :select => 'tasks.id, procedures.id', :conditions => ["model_id = ? AND operating_system_id = ?", model_id, operating_system_id], :include => [:tasks]) 
    end 

end 

的get_tasks方法检索与过程相关的任务,但我不知道该如何处理数据在轨数据库中抽取的,我一直无法访问返回的属性对象通过控制器,因为它们还没有被渲染?

我非常希望能够格式化这个数据让我只有TASK_ID的数组,我可以再通过在适当的表创建新行中循环。找到数据时,第一个选项:

+0

你是什么意思操纵数据?你是否希望有一个HTML表单,你可以用它来管理所有的东西? – 2010-08-19 01:41:03

+0

有一个用于启动退役过程的表单,您输入添加到解除表的所有详细信息。在此之后,我想拉取decommission_id和所有相关的task_id,并将它们添加到host_tasks表中。我想自动将这些添加到控制器级别。 当我说操纵数据的时候,我的意思是让它脱离@example = [task_id1,task_id2等] 而不是让@example =“疯狂的红宝石对象堆叠在自己内部的属性堆” – Rumpleteaser 2010-08-19 04:13:10

+0

我发现我可以通过去@ tasks.task.name等来访问子属性是否有更好的方法,然后遍历所有这些并发送一个SQL命令为每个?有没有一个很好的方法来做到这一点? – Rumpleteaser 2010-08-19 07:01:22

回答

0

,因为我用的是这不是循环通过。我将它改为:所有允许我做的事等

不是最好的选择,但将永远只能是一个无论如何选择,这样就不会出现问题了。