Я строю двигатель рельсов, который использует внешние ключи при миграции.Условные зависимости рубиновых драгоценных камней в пределах gemspec
add_foreign_key "theblog_content_nodes",
"theblog_content_statuses", column: :content_status_id
От версии 4.2
рельсам поддерживает внешние ключи сама по себе, но прежде, чем мы использовали foreigner
камень для этого. Если мы попытаемся использовать foreigner
с rails 4.2
, и новее мы получим сообщение об ошибке.
Так как я собираюсь поддерживать рельсы, начиная с 4.0.1. Я должен использовать условную зависимость в моем gemspec.
Я нашел возможное решение here, но я понятия не имею, как проверить версию рельсов в gemspec.
# sidekiq-spy.gemspec
if RUBY_VERSION >= '2.1'
spec.add_development_dependency "curses", "~> 1.0"
end
Примечание:
У меня есть еще одно временное решение: Я просто проверить Foreigner
наличие в моих миграций. Если он недоступен, я просто не создавать внешние ключи:
if defined?(Foreigner)
add_foreign_key "theblog_content_nodes",
"theblog_content_statuses", column: :content_status_id
end
Но я хотел бы добавить foreigner
зависимости для старых версий рельсов.
Вы думаете о предоставлении двух различных версий вашего драгоценного камня для этого сценария? – iltempo
@iltempo, я могу даже использовать одну версию для обоих сценариев. Просто добавьте примечание, что нам нужно добавить «gem» иностранца «' в 'Gemfile', если версия Rails меньше, чем' 4.2', и мы хотим использовать внешние ключи. –