2 пользовательских класса для 1 модели в Rails
Можно ли создать одну модель для двух разных объектов? например:
У меня есть блог, на котором я буду публиковать статьи на чистом тексте и скринкасты только с видео.
С этим в мыслях:
я хочу получить только все сообщения => @posts = Posts.all
я хочу получить только все скринкасты => @posts = Screencasts.all
и я хочу получить только все статьи => @posts = Articles.all
И по мнению я хочу знать, какой класс этот пост
<% if @posts.first is article %>
do something
<% else %>
do something else
<% end %>
если это невозможно, как я могу сделать что-то подобное?
1 ответ
Вы могли бы использовать Single Table Inheritance для достижения этой цели, но я не уверен, что это лучшее решение.
У вас будет модель Post с обычным столбцом; тело, текст и screencast_url или что-то подобное для вашей скринкаста. Теперь волшебство происходит путем добавления столбца "type" в виде строки. Rails будет использовать это для отслеживания унаследованной модели.
После этого вы можете получить обе модели от Post.
class Post < ActiveRecord::Base
end
class Screencast < Post
end
class Article < Post
end
Теперь ваш пример кода должен работать так, как вы хотите. Вы можете найти больше информации о STI на этой странице Rails API
Ваш цикл может быть примерно таким:
<% @posts.each do |post| %>
<% if post.class == Article %>
do something
<% elsif post.class == Screencast %>
do something else
<% end %>
<% end %>