2010-04-01 36 views
3

我有一个Post类和一个Comment类。我有一个帖子对象,并希望将其转换为Comment对象。我经历了Rails api,发现变成了(klass)。现在,发布和评论之间没有关联。所以我试了如何使用成为导轨

@post.becomes(Comment) 

但是变成@post对象的方法找不到。我错过了什么吗?

回答

0

我假设你说的是从ActiveRecord :: Base派生的类。在这种情况下,我认为你有两个选择,如果你真的想转换的职位为注释(这似乎有点怪我):

  • 你可以用它标记属性只有一个类别(例如输入)它可以作为文章或评论,您可以根据需要设置
  • 您可以创建并保存包含帖子对象文本的新评论对象,然后删除帖子对象。
+0

。我为一些类和一些其他类对象定义了访问该方法所需的方法。我也可以把它包含在一个共同的帮手中,但是我遇到了这个问题,并且按照我的想法解决了这个问题。所以想知道它是如何工作的。 – 2010-04-01 06:27:10

+2

好吧,在这种情况下,我认为'成为'工作岗位必须继承评论。正如文档中所说的,当你希望子类的一个实例作为超类的一个实例出现时,'become'就很有用。 – 2010-04-01 07:03:09

+0

晚会的方式,但(至少)4.2ish,'成为'可以在两个不相关的对象之间工作。不要以任何方式提出建议,只要说明它行得通。 – 2017-10-17 00:25:44

3

把你希望这两个模型在模块上使用的方法。然后在两种模型中包含该模块。

+0

谢谢。解决方案是正确的。接受上面的答案,因为我得到了一些准确的解释使用成为。 :)。为延误道歉! – 2011-01-17 09:52:20

3

请注意,变为返回一个新的对象,但不会修改现有的对象。你需要自己做分配

@post = @post.becomes(Comment) 

见我试图强制转换对象的文档ActiveRecord::Persistence#becomes