当我的应用创建新工单时,它还会创建与该工单相关联的第一个任务。新任务应该将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
我错过了什么? 谢谢!
更新---- taskstatus表中的第一条记录的id = 2.删除了id = 1的记录。我希望新任务记录有一个taskstatus_id = 2。
在taskstatus.rb中,我有:
default_scope :order => 'id ASC'
这也创建了taskstatus = 1
的任务Taskstatus.limit(1)
我正在使用postgreSQL。
在taskstatus索引页面上,3条记录显示=
id statuscode
2新
3开始
4完成
发生了奇怪的事!
更新2 - 你不会相信这个!!!!!! (我不会) - 但是,这是真的。
我将代码更改为:
Taskstatus.where(:statuscode => "New")
即使New有id = 2,任务也得到1
postgreSQL会出现问题吗?
答案 0 :(得分:1)
试试这个
Taskstatus.order("id").first
答案 1 :(得分:1)
正如其他人所说,.first
是无序的。
您可以通过添加显式排序(.order(:id).first
)或使用default_scope
总是对结果进行排序来解决此问题:
class Taskstatus < ActiveRecord::Base
default_scope order(:id)
end
现在Taskstatus.first
将始终是第一条按id排序的记录。如果您的订单发生变化,这可能会很有用,最后考虑使用最早的created_at
作为“第一”记录。