【问题标题】:2 User-defined classes for 1 model in RailsRails 中 1 个模型的 2 个用户定义类
【发布时间】:2011-07-11 14:31:04
【问题描述】:

是否可以创建一个代表两个不同对象的模型? 例如:

我有一个博客,我将在该博客上发表纯文本文章和仅包含视频的截屏视频。

考虑到这一点:

我只想获取所有帖子 => @posts = Posts.all
我只想获取所有截屏视频=> @posts = Screencasts.all
我只想获取所有文章 => @posts = Articles.all

在视图中我想知道这篇文章是哪个类

<% if @posts.first is article %>
  do something
<% else %>
  do something else
<% end %>

如果这是不可能的,我该怎么做?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 model rhtml


    【解决方案1】:

    您可以使用单表继承来实现这一点,但我不确定它是否是最佳解决方案。

    您将拥有一个具有通常列的 Post 模型;正文、文本和 screencast_url 或您的截屏视频的类似内容。现在神奇的发生是通过将“类型”列添加为字符串。 Rails 将使用它来跟踪继承的模型。

    然后您可以让两个模型都从 Post 继承。

    class Post < ActiveRecord::Base
    end
    
    class Screencast < Post
    end
    
    class Article < Post
    end
    

    现在您的代码示例应该按照您希望的方式运行。您可以在 Rails API page 上找到有关 STI 的更多信息

    您的循环可能是这样的:

    <% @posts.each do |post| %>
      <% if post.class == Article %>
        do something
      <% elsif post.class == Screencast %>
        do something else
      <% end %>
    <% end %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 2015-10-01
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多