gpt4 book ai didi

ruby-on-rails - rails : Single table inheritance and find(:all) in parent

转载 作者:数据小太阳 更新时间:2023-10-29 07:51:31 26 4
gpt4 key购买 nike

我了解 STI 的工作原理,因为我已经说过一个 Post 模型包含论坛上的帖子和几个子帖子,例如'ordinaryUserPost' 和 'adminUserPost' 等

现在,我想在每个子帖子中定义相同的方法,但是该方法在每种情况下都会做一些不同的事情,例如

class Post < ActiveRecord::Base
end

class AdminUserPost < Post
def background_color
'rockstar red'
end
end

class OrdinaryUserPost < Post
def background_color
'pale blue'
end
end

(是的,这是一个愚蠢的例子)。现在在我的线程 Controller 中我做 Post.find(:all) 它给了我一个我需要渲染的帖子列表,但它们是“发布”对象,而不是 AdminUserPost 或 OrdinaryUserPost - 所以我不能获取我的 background_color 方法!我将不得不做一个发现每种类型的用户分别发帖...

有什么我可以做的:

Post.find(:all)

然后在结果数组中获取 AdminUserPost 列表和OrdinaryUserPost 对象而不是 Post 对象?

或者是否有一种很好的方法可以将我的 Post 对象适本地“转换”到 AdminUserPost 和 OrdinaryUserPost 中?

编辑:

这按预期工作 - 前提是您在 Post 类中有一个名为“类型”的列。如果您的列名为其他名称,例如“post_type”,那么您需要添加:

self.inheritance_column = 'post_type'

在所有子模型(本例中为 AdminUserPost 和 OrdinaryUserPost)和父模型(Post)中。

谢谢,

斯蒂芬。

最佳答案

仔细检查帖子表是否有“类型”列(字符串)。如果 AdminUserPosts 和 OrdinaryUserPosts 被写入表 'posts' 并且类型列是正确的,你应该得到你期望的子类行为。

关于ruby-on-rails - rails : Single table inheritance and find(:all) in parent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/732077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com