У меня есть три модели: User
, Company
и Subscription
.То, что я пытаюсь сделать, это то, что Subscription
принадлежит либо User
ИЛИ Company
.
Чтобы попытаться выполнить это, я сослался на это руководство , но я былбезуспешно, поскольку создание записи продолжает откатываться.
вот моя Company
модель:
# app/models/company.rb
class Company < ApplicationRecord
has_many :subscriptions, dependent: :destroy, as: :imageable
end
вот моя User
модель:
# app/models/user.rb
class User < ApplicationRecord
has_many :subscriptions, dependent: :destroy, as: :imageable
end
и, наконец,вот моя Subscription
модель:
class Subscription < ApplicationRecord
belongs_to :imageable, polymorphic: true
end
Теперь, что касается файла миграции, это мой Subscription
файл миграции:
class CreateSubscriptions < ActiveRecord::Migration[5.1]
def change
create_table :subscriptions do |t|
t.references :imageable, polymorphic: true, index: true
t.date :start_date
t.date :stop_date
t.timestamps
end
end
end
Насколько я вижу,это в значительной степени точно так же, как показывает гид, но он продолжает отступать.Вот вывод консоли rails:
Loading development environment (Rails 5.1.6)
2.5.1 :001 > Subscription.create(imageable_id: 1, start_date: Time.now, stop_date: 2.days.from_now)
(8.6ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
(0.2ms) BEGIN
(0.3ms) ROLLBACK
=> #<Subscription id: nil, imageable_type: nil, imageable_id: 1, start_date: "2018-10-10", stop_date: "2018-10-12", created_at: nil, updated_at: nil>
2.5.1 :002 >
Вот мои вопросы:
- Почему существует поле
imageable_type
?Это создано t.references
и если да, то мне это нужно?Могу ли я просто использовать imageable_id
вместо t.references
, как показывает другая часть предложения? - Почему оно откатывается?Полиморфные ассоциации выполняются по-разному в Rails 5.x или что-то случайно?
- Согласно графику, показанному в руководстве, похоже, что изображение принадлежит
imageable_id
4, тогда, если есть сотрудник ANDпроизводство с идентификатором 4, тогда изображение будет принадлежать обоим вместо одного или другого, как я пытаюсь сделать.Правильно?