Когда вы используете однонаправленное наследование таблицы, вы получаете одну и только одну таблицу со столбцом «type» в ней. Итак, в вашем случае у вас есть «содержимое» таблицы со столбцом «type», в котором вы храните одну из строк: «post» или «article».
При использовании STI в вашем приложении Rails вы должны определить три модели: Content (наследуется от ActiveRecord::Base
как обычные моделей), почты и статьи (оба наследуют от Content
) и работать с ними непосредственно, например: Post.find
, Article.last
,
Поскольку Post и Article являются строками одного и того же «содержимого» таблицы, каждый из них всегда имеет отдельный идентификатор. Я не знаю логики вашего приложения и каких целей вы пытаетесь достичь (например, я не могу понять, что должно быть логическим различием между Post и Article), но я предлагаю реализовать это действие из вашего примера как:
def find_content
@content = Post.find_by_id(params[:content_id]) || Article.find_by_id(params[:content_id]
end
Я использую .find_by_id
не .find
, потому что второе сгенерирует исключение вам нужно обрабатывать/спасение и первый будет возвращать nil
.
Конечно, мой пример не изящный, но я надеюсь, что вы поймете суть.