У меня STI, как это:Как переназначить класс STI переменной в методе модели?
class Post
end
class Post::Confirmed < Post
end
class Post::Draft < Post
def confirm!
becomes Post::Confirmed
end
end
...# somewhere in controller
# POST /posts/1/confirm
# POST /posts/1/confirm.json
def confirm
@post = Post::Draft.first
@post = @post.confirm! # this is the only way I can reload @post with Post::Confrmed
end
ли это как-то можно сделать:
@post.confirm! # I want this @post(Post::Draft) to become Post::Confirmed without reassigning
Или это просто ни RoR путь?
Заранее благодарен!
Вы уверены, что STI подходит в этом случае? Разве не был бы понятен простой флаг состояния и некоторые области? –
У меня есть об этом, но область действия немного больше, чем в этом примере: все подклассы работают как пространства имен для заданных классов, поэтому проекты имеют свои собственные методы и подтвержденные сообщения - свои собственные. Я думаю, я могу ошибаться. Но все же STI отлично подходит для этого. – IlyaDoroshin
@muistooshort представьте, что у вас есть корзина для покупок. Это структурно то же самое, что и Order: у него есть предметы, общая цена и т. Д. Но методы для каждого класса разные. – IlyaDoroshin