Postgresql & Rails 3 - Update_attribute для элементов в массиве переупорядочивает массив .. почему? - PullRequest
0 голосов
/ 18 мая 2011

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> 

Всякий раз, когда я обновляем_attribute модель, эта модель помещается в конец массива. Есть ли другой способ, кроме назначения специального атрибута сортировки, чтобы избежать изменения порядка массива при вызове update_attribute? Я мог бы довольно легко сделать это, но меня интересует поведение базы данных.

Даже когда я удаляю метки времени из модельного объекта, поведение остается.

Как это происходит, если нет меток времени, чтобы отслеживать, какая модель была только что обновлена? Или модель фактически вытаскивается из массива и возвращается в последнюю позицию, когда я вызываю update_attribute?

1 Ответ

3 голосов
/ 18 мая 2011

Я не эксперт по PostgreSQL, но я заметил такое же поведение. Насколько я понимаю, PostgreSQL не имеет порядка по умолчанию, как такового (в то время как MySQL надежен - насколько я знаю - в порядке по первичному ключу). Формат данных PostgreSQL может означать, что измененные записи сдвинуты в конец.

Вкратце: это не Rails - это PostgreSQL, поэтому временные метки не имеют значения.

В любом случае, это заставляет вас четко понимать порядок, в котором вы хотите вернуть вещи. Не страшная идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...