我有一个Post
类和一个Comment
类。我有一个帖子对象,并希望将其转换为Comment对象。我经历了Rails api,发现变成了(klass)。现在,发布和评论之间没有关联。所以我试了如何使用成为导轨
@post.becomes(Comment)
但是变成@post
对象的方法找不到。我错过了什么吗?
我有一个Post
类和一个Comment
类。我有一个帖子对象,并希望将其转换为Comment对象。我经历了Rails api,发现变成了(klass)。现在,发布和评论之间没有关联。所以我试了如何使用成为导轨
@post.becomes(Comment)
但是变成@post
对象的方法找不到。我错过了什么吗?
我假设你说的是从ActiveRecord :: Base派生的类。在这种情况下,我认为你有两个选择,如果你真的想转换的职位为注释(这似乎有点怪我):
把你希望这两个模型在模块上使用的方法。然后在两种模型中包含该模块。
谢谢。解决方案是正确的。接受上面的答案,因为我得到了一些准确的解释使用成为。 :)。为延误道歉! – 2011-01-17 09:52:20
请注意,变为返回一个新的对象,但不会修改现有的对象。你需要自己做分配
@post = @post.becomes(Comment)
见我试图强制转换对象的文档ActiveRecord::Persistence#becomes
。我为一些类和一些其他类对象定义了访问该方法所需的方法。我也可以把它包含在一个共同的帮手中,但是我遇到了这个问题,并且按照我的想法解决了这个问题。所以想知道它是如何工作的。 – 2010-04-01 06:27:10
好吧,在这种情况下,我认为'成为'工作岗位必须继承评论。正如文档中所说的,当你希望子类的一个实例作为超类的一个实例出现时,'become'就很有用。 – 2010-04-01 07:03:09
晚会的方式,但(至少)4.2ish,'成为'可以在两个不相关的对象之间工作。不要以任何方式提出建议,只要说明它行得通。 – 2017-10-17 00:25:44