0

当我的应用程序创建新的工作订单时,它还会创建与该工作订单关联的第一个任务。新任务应将其 taskstatus 设置为 Taskstatus 表中的第一个 id。

Taskstatus 表中的第一条记录恰好有一个 id = 2。
但是,代码设置 task.taskstatus_id = 1

工单控制器代码:

  before_create :first_task

  protected
  def first_task
   self.tasks.build taskstatus_id: Taskstatus.first, taskname: self.description
  end

我错过了什么?谢谢!

UPDATE ---- taskstatus 表中的第一条记录id = 2。id = 1 的记录被删除。我希望新任务记录的 taskstatus_id = 2。

在 taskstatus.rb 中,我有:

  default_scope :order => 'id ASC' 

这也创建了一个 taskstatus = 1 的任务

Taskstatus.limit(1)

我正在使用 postgreSQL。

在 taskstatus 索引页面上,显示 3 条记录 =

身份状态码

2 新

3 开始

4 完成

奇怪的事情发生了!!

更新 2 - 你不会相信这个!!!!!! (我不会)-但是,这是真的。

我将代码更改为:

Taskstatus.where(:statuscode => "New")

即使 New 的 id = 2,任务也得到了 1

postgreSQL 有什么问题吗?

4

2 回答 2

1

试试这个

Taskstatus.order("id").first
于 2013-01-06T14:54:27.177 回答
1

正如其他人所说,.first是无序的。

您可以通过添加显式排序 ( .order(:id).first) 或使用 a始终对结果default_scope进行排序来解决此问题:

class Taskstatus < ActiveRecord::Base

  default_scope order(:id)

end

现在Taskstatus.first将永远是第一条记录,按 id 排序。如果您的订单发生变化,这可能很有用,并且您最终考虑将最早created_at的记录作为“第一个”记录。

于 2013-01-06T15:01:25.687 回答