Как описано в в этой статье, я использую автоматические ассоциации в светильниках. Например, если объект области имеет идентификатор страны, вместо того, чтобы делать "country_id": 1, я делаю "страну": "США". "USA" - это ярлык в моем файле countries.yml, поэтому приборы знают, как позаботиться об этом. Однако это работает, только если вы не укажете значение ID для объекта countries. Поэтому я не могу присвоить идентификатор USA равным 1. Но если я не назначаю его равным 1, он окажется в некотором большом значении 8974343... что странно. Есть ли способ получить приспособления для автоматического генерации id, которые не являются сверхвысокими?.... или это нормально?
Автоматические ассоциации в рубинах на рельсах
Ответ 1
Считывая документацию по 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.
Ответ 2
Вот как вы получаете автогенерированный идентификатор ярлыка прибора.
Fixtures.identify(:reginald)
Ответ 3
Поскольку у меня недостаточно репутации для комментариев, это фактическая документация Rails 4.1:
В интерполяции ярлыка Fixture:
monkey_id: <%= ActiveRecord::FixtureSet.identify(:reginald) %>
pirate_id: <%= ActiveRecord::FixtureSet.identify(:george) %>
Ответ 4
Идентификатор fixture приходит непосредственно из хэширования его имени (что "мы можем обнаружить любой идентификатор устройства без загрузки чего-либо, если мы знаем метку" )
Ответ 5
автоматизированный тест для обеспечения целостности прибора
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