Rails 'new_record? не сбрасывается (в true), если транзакция откатывается - PullRequest
2 голосов
/ 04 декабря 2009

Итак, пройдите следующий тест в Rspec:

require 'spec_helper'
describe Author do
  self.use_transactional_fixtures = false

  after(:each) do
    Author.destroy_all
  end

  it "should behave normal when using transactions" do
    my_author = nil
    begin
      Author.transaction do
        my_author = Author.new(:name => "My Name")
        my_author.new_record?.should be_true
        my_author.save!
        raise "some exception"
      end
    rescue
    end
    Author.count.should == 0
    my_author.new_record?.should be_true
  end
end

Последняя строка:

my_author.new_record?.should be_true

дает:

'Author should behave normal when using transactions' FAILED
expected true, got false

по крайней мере, когда вы откатываете создание какой-либо записи, я ожидаю, что она откатится полностью, поэтому сбросьте new_record? и идентификатор тоже. Я что-то здесь упускаю? Это предназначено? Я использую рельсы 2.3.5

Ответы [ 2 ]

2 голосов
/ 04 декабря 2009

Delph, это ошибка в рельсах. Он должен сбросить id и new_record, но это не так.

Для получения дополнительной информации см. Ссылку ниже

https://rails.lighthouseapp.com/projects/8994/tickets/1948-transaction-block-sets-model-id-to-non-existent-row

0 голосов
/ 04 декабря 2009

Да, это предназначено. Операция транзакции является блоком только для базы данных. Это ничего не изменит в ваших рубиновых объектах в памяти.

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