【问题标题】:looping through a rails data object from the controller从控制器循环通过 rails 数据对象
【发布时间】: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


【解决方案1】:

它没有循环,因为我在查找数据时使用了 :first 选项。我把它改成 :all 让我 .each 做 |f|等等

不是最好的选择,但无论如何只会有一个选择,所以不会造成问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 2017-10-22
    • 2015-10-09
    • 2016-10-11
    相关资源
    最近更新 更多