我已经从类中调用了一个函数来查找与多对多HABTM关系中的特定ID相关的所有项目。
程序 - >具有连接表的任务:procedures_tasks
我将信息称为@example = Procedure.get_tasks(1,1)
我希望能够遍历返回的数据,以便我可以创建与所讨论的过程相关的每个task_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
我尝试像往常一样渲染数据,然后使用.each do | f |在视图层,但我得到:
undefined method `each' for #<Procedure:0x2b879be1db30>
原始问题:
我正在创建一个rails应用程序来跟踪我们执行的进程。创建进程的新实例时,我想为所有需要执行的任务自动创建行。 表:
程序 - &gt;通过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方法将检索与该过程相关的任务,但我不知道如何操纵从rails中的数据库中提取的数据,我无法通过控制器访问返回对象的属性因为它们尚未渲染?
理想情况下,我希望能够格式化这些数据,以便我只有一个task_id数组,然后我可以循环在相应的表中创建新行。
答案 0 :(得分:0)
它没有循环,因为我在查找数据时使用的是:first选项。我把它改成了:所有允许我的东西。每个人都做| f |等
不是最好的选择,但总会有一个选项,所以它不会引起问题。