Вам необходимо получить доступ к области для этого отношения, чтобы иметь возможность правильно построить эти объекты. Это доступно для метода класса:
class Redirect < ActiveRecord::Base
def self.factory_build(attributes)
redirect_type =
case (status_code = attributes.delete(:code))
when 301
PermanentRedirect
when 302
TemporaryRedirect
else
Redirect
end
redirect_type.new(attributes.merge(scoped.scope_for_create))
end
end
Я позволил себе высушить ваш код создания, потому что у вас было много дублирования. Также обратите внимание, что вызов find
только для осуществления отношений является пустой тратой ресурсов. Если вам известен идентификатор записи, просто передайте его как атрибут, если только у вас нет веских причин для его извлечения в первую очередь.
Вызов scoped.scope_for_create
возвращает атрибуты, определенные вашей текущей областью или областями действия. Обычно они имеют вид чего-то вроде { 'website_id' => 101 }
и могут быть переданы вашему вызову create.