Postgresql & Rails 3 - 数组中元素的Update_attribute对数组进行重新排序。为什么?



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的事情,因此时间戳并不重要。

无论哪种方式,它都会迫使您清楚您希望退回物品的顺序。不是一个糟糕的主意。

相关内容

  • 没有找到相关文章

最新更新