如何在Rails中使用变成

Alo*_*ain 5 ruby ruby-on-rails

我有一个Post班级和一个Comment班级。我有一个 post 对象,想将它转换为 Comment 对象。我浏览了 Rails api,发现变成了(klass)。现在,帖子和评论之间没有关联。所以我试过了

@post.becomes(Comment)
Run Code Online (Sandbox Code Playgroud)

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

kik*_*ito 5

将您希望两个模型都使用的方法放在一个模块上。然后将该模块包含在两个模型中。


Mar*_*ues 5

请注意,变成返回一个新对象但不修改现有对象。你需要自己做作业

@post = @post.becomes(Comment)
Run Code Online (Sandbox Code Playgroud)

请参阅文档ActiveRecord::Persistence#becomes


Ale*_*ban 0

我假设您正在谈论从 ActiveRecord::Base 派生的类。在这种情况下,如果您确实想将帖子转换为评论,我认为您有两种选择(这对我来说有点奇怪):

  • 您可以只有一个类(例如 Entry),其属性将其标记为帖子或评论,您可以根据需要设置该属性
  • 您可以创建并保存一个包含帖子对象文本的新评论对象,然后删除该帖子对象。

  • 好吧,在这种情况下,我认为要使“成为”起作用,Post 必须继承自 Comment。正如文档所述,当您希望子类的实例显示为超类的实例时,“成为”非常有用。 (2认同)