Автоматические ассоциации в ruby ​​на рельсах светильников - PullRequest
18 голосов
/ 18 апреля 2009

Как описано в этой статье , я использую автоматические ассоциации в приборах. Например, если у объекта региона есть идентификатор страны, вместо «country_id»: 1 я делаю «страна»: «США». «USA» - это ярлык в моем файле стран.yml, поэтому приборы знают, как позаботиться об этом. Однако это работает только тогда, когда вы не указываете значение идентификатора для объекта стран. Поэтому я не могу присвоить США идентификатор, равный 1. Но если я не назначу его равным 1, он в конечном итоге станет большим значением 8974343 ... что довольно странно. Есть ли способ получить приборы для автоматической генерации идентификаторов, которые не являются сверхвысокими? .... или это нормально?

Ответы [ 5 ]

24 голосов
/ 14 июля 2010

Так вы получаете автоматически сгенерированный идентификатор метки прибора.

Fixtures.identify(:reginald)
22 голосов
/ 18 апреля 2009

Читая документацию API, именно так должны себя вести автоматически сгенерированные приборы - если вы хотите заранее указать конкретное значение идентификатора для прибора, вам, вероятно, следует просто назначить его самостоятельно.

Если нет, ну из документации API:

The generated ID for a given label is constant, so we can discover any fixture‘s ID without loading anything, as long as we know the label.
16 голосов
/ 09 апреля 2014

Поскольку у меня недостаточно репутации, чтобы комментировать, это фактическая документация по Rails 4.1:

http://edgeapi.rubyonrails.org/classes/ActiveRecord/FixtureSet.html#class-ActiveRecord::FixtureSet-label-Fixture+label+interpolation

Под интерполяцией метки прибора:

monkey_id: <%= ActiveRecord::FixtureSet.identify(:reginald) %>
pirate_id: <%= ActiveRecord::FixtureSet.identify(:george) %>
3 голосов
/ 12 июля 2009

Идентификатор прибора получен непосредственно из хэширования его имени (вот так «мы можем узнать любой идентификатор прибора, не загружая ничего, если мы знаем метку»)

1 голос
/ 19 августа 2014

автоматизированный тест для проверки целостности прибора

  class FixtureIntegrityTest < ActiveSupport::TestCase
    context "fixture integrity" do
      should "work" do
        fixtures = Dir["test/fixtures/*.yml"].map do |file|
          [file, File.basename(file).sub(/\..*/, "").singularize, YAML.load(ERB.new(File.read(file)).result)]
        end

        failures = fixtures.reject(&:last).map { |file,*| "#{file} is empty!"}

        failures = failures.presence || fixtures.map do |_, klass, content|
          content.select{ |_,fixture| fixture["id"] }.map do |name, _|
            fixtures.map do |file, _, content|
              content.select { |_,fixture| fixture[klass] == name }.map do |_, fixture|
                "#{file} uses #{klass}: #{name}, but should use the id!"
              end
            end
          end
        end.flatten.compact

        assert_equal [], failures
      end
    end
  end
...