Postgresql/Rails 3/Ruby 1.9.2/OSX
class Deliverable < ActiveRecord::Base
has_many :models, :dependent => :destroy
def build_template
models << sect_letterhead << sect_ica << sect_project_description_exhibit
end
end
ruby-1.9.2-p180 :002 > d.models.first
=> #<Model id: 1, company_id: nil, deliverable_id: 1, model_id: nil, type: nil, kind: "cover_page", csv_file_name: nil, csv_content_type: nil, csv_file_size: nil, csv_updated_at: nil>
ruby-1.9.2-p180 :003 > d.models.first.update_attribute(:csv_file_name, "blah")
=> true
ruby-1.9.2-p180 :004 > d.models.first
=> #<Model id: 5, company_id: nil, deliverable_id: 1, model_id: nil, type: nil, kind: "opening_letter", csv_file_name: nil, csv_content_type: nil, csv_file_size: nil, csv_updated_at: nil>
每当我update_attribute一个模型时,该模型都会被推到数组的末尾。 除了分配自定义排序属性之外,还有其他方法可以避免在调用update_attribute时更改数组顺序? 我可以很容易地做到这一点,但我对数据库的行为很感兴趣。
即使我从模型对象中删除时间戳,行为仍然存在。
如果没有时间戳来跟踪刚刚更新的模型,则如何发生这种情况? 还是当我调用update_attribute时,模型实际上是否从阵列中拉出并放回最后一个位置?
我不是PostgreSQL专家,但我注意到了同样的行为。我的理解是PostgreSQL本身没有默认顺序(而MySQL是可靠的 - 据我所知 - 按主键排序)。PostgreSQL的数据格式可能意味着修改后的记录被移到最后。
简而言之:这不是Rails的事情 - 这是PostgreSQL的事情,因此时间戳并不重要。
无论哪种方式,它都会迫使您清楚您希望退回物品的顺序。不是一个糟糕的主意。