Как полиморфные ассоциации получают значение imageable_id в действии New? - PullRequest
0 голосов
/ 11 октября 2018

У меня все еще очень трудное время с полиморфными ассоциациями, потому что я не могу делать вложенные формы.Однако, даже не входя в формы, я не могу даже сделать то, что я считаю очень простой задачей.

Например:

#app/models/user.rb
class User < ApplicationRecord
    has_many subscriptions, dependent: :destroy, as: :imageable
end

.

#app/models/company.rb
class Company < ApplicationRecord
    has_many :subscriptions, dependent: :destroy, as: :imageable
end

.

#app/models/subscription.rb
class Subscription < ApplicationRecord
    belongs_to :imageable, polymorphic: true
end

, если я запускаю Company.first.subscriptions.create(name: "Random"), это работает, но происходит следующее:

@company = Company.new({:name => "Random Company Name"})
@company.subscriptions.build
@company.save

Почему это не удается?Кажется, потому что @company.subscriptions показывает связанный Subscription с imageable_type: Company, но imageable_id: nil.Это законный случай, когда я не хочу добавлять подписку, но хочу добавить Company.

Если это так, то как мне получить imageable_id?С полиморфной ассоциацией, не должно ли imageable_id автоматически заполняться, когда @company сохраняет?

1 Ответ

0 голосов
/ 11 октября 2018

Я думаю, что когда вы звоните

@company = Company.new({:name => "Random Company Name"})

Вы инициализируете новую запись, не сохраняя ее, то есть она имеет идентификатор nil.

Когда вы тогда звоните

@company.subscriptions.build

Не известно, какой company_id назначить новую подписку.Попробуйте изменить первую строку на:

@company = Company.create({:name => "Random Company Name"})

Это будет означать, что @company будет присвоен идентификатор, который затем может быть назначен подписке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...