【发布时间】:2010-08-19 01:08:33
【问题描述】:
我从一个类中调用了一个函数,以在多对多 HABTM 关系中查找与特定 ID 相关的所有项目。
Procedures -> 带有连接表的任务: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 应用程序来跟踪我们执行的流程。创建流程的新实例时,我想为所有需要执行的任务自动创建行。 表:
- 退役
- 型号
- 操作系统
- 程序
- 任务
- procedures_tasks
- host_tasks
procedures -> 任务是多对多的,通过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 的数组,然后我可以循环在适当的表中创建新行。
【问题讨论】:
-
操纵数据是什么意思?您是否希望拥有一个可以管理所有内容的 HTML 表单?
-
有一个用于启动停用过程的表格,您可以输入添加到停用表中的所有详细信息。在此之后,我想提取 decommission_id 和所有相关的 task_id 并将它们添加到 host_tasks 表中。我想自动将它们添加到控制器级别。当我说操作数据时,我的意思是剥离它,以便 @example = [task_id1, task_id2, etc] 而不是 @example = "crazy ruby object with heaps of attributes in its own"
-
我发现我可以通过@tasks.task.name 等访问子属性。有没有更好的方法来遍历所有这些并为每个发送一个sql命令?有没有办法做到这一点?
标签: sql mysql ruby-on-rails loops