2 User-defined classes for 1 model in Rails
Is it possible to create one model that stands for two different objects? for example:
I have a blog, on which, I will publish articles on pure text and screencasts with only video.
With that in mind:
I want to get only all posts => @posts = Posts.all
@posts = Screencasts.all
and I want to get only all articles => @posts = Articles.all
And in the view I want to know which class is this post
<% if @posts.first is article %&开发者_开发知识库gt;
do something
<% else %>
do something else
<% end %>
if this is not possible, how can I do something like that?
You could use Single Table Inheritance to achieve this but I'm not sure it's the best solution.
You would have a Post model which has the usual column; body, text and a screencast_url or something similar for your screencast. Now the magic happens by also adding the "type" column as a string. Rails will use this to keep track of the inherited model.
You could then have both models inherit from Post.
class Post < ActiveRecord::Base
end
class Screencast < Post
end
class Article < Post
end
Now your code example should work the way you want it to. You can find more information about STI on this Rails API page
Your loop could be something like this:
<% @posts.each do |post| %>
<% if post.class == Article %>
do something
<% elsif post.class == Screencast %>
do something else
<% end %>
<% end %>
精彩评论