Как я могу получить хэш содержимого экземпляра приспособления Rails?


Это использование Rails 4.2.0, Ruby 2.2.0.

Что я хотел бы сделать, так это использовать данные, содержащиеся в объекте fixture, чтобы проверить, что дубликаты пойманы перед вставкой в ту же базу данных:

  test "identical entries should be impossible to create" do
    dup_entry = Entry.new(entries(:test_entry))
    assert_not dup_entry.save
  end

(где Entry-хорошо определенная модель с методом контроллера .new, а test_entry - приспособление, содержащее некоторый допустимый экземпляр Entry.)

К сожалению, это не работает, потому что entries(:test_entry) будет Entry, а не хэш, принятый Entry.new.

Я знаю, что я можно получить доступ к свойствам fixture с выражением вида fixture_objname.property в соответствующих тестах, так как все, что указано в YAML, будет автоматически вставлено в базу данных и загружено. Проблема в том, что мне приходится вручную перепечатывать кучу имен свойств для объекта, который я только что указал в YAML, что кажется глупым.

В документации также говорится, что я могу получить фактические экземпляры модели, добавив self.use_instantiated_fixtures = true в тестовый класс. Однако, похоже, их нет. любой instance_methods, который будет сбрасывать экземпляр модели приспособления (test_entry) в хэш-формате для обратной передачи в Метод .new.

Есть ли идиоматический способ получить то, что я хочу, или другой, более простой способ?
1 2

1 ответ:

Мне кажется, вы ищете что-то вроде:

entries(:test_entry).attributes
entries(:test_entry).attributes.class # => Hash

При необходимости можно также Удалить Свойства:

entries(:admin).attributes.except("id")

Надеюсь, это поможет.