ruby-on-rails - 如何更改现有的评论模型,使其可以属于许多不同的模型?

标签 ruby-on-rails ruby-on-rails-4 polymorphic-associations rails-migrations

在我的 Rails 应用程序中,评论属于页面(并存储页面 ID),而页面有很多评论。但现在我希望 Comment 也属于另一个模型,比如 Picture。 Railscasts Polymorphic associations讨论如何最初将 Commentable 设置为 Comment 与其所属模型之间的中介。

但是,我已经有一个现有的评论 - 页面设置。如何将数据库列和数据迁移到新的可评论设置,以免出现任何中断?

最佳答案

试试这个:

将列 page_id 重命名为 commentable_id 并创建一个名为 commentable_type 的附加列,并将其设置为默认值:“page”,以便上一个列表中数据是合适的。

迁移应该是:

1) 将 page_id 重命名为 commentable_id 的迁移

class RenameColumnPageIdToCommentableIdInComments < ActiveRecord::Migration
  def up
    rename_column :comments, :page_id, :commentable_id       
  end

  def down
    rename_column :comments, :commentable_id, :page_id      
  end
end

2)添加commentable_type的迁移

class AddColumnCommentableTypeToComments< ActiveRecord::Migration
  def up        
    add_column :comments, :commentable_type, :string, default: 'Page'
  end

  def down
    rename_column :comments, :commentable_type,
  end
end

然后,您将需要更改注释和 View 的 Controller 代码。 希望有帮助:)

关于ruby-on-rails - 如何更改现有的评论模型,使其可以属于许多不同的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26923487/

相关文章:

ruby-on-rails - 用于从一种形式创建多个对象的 Rails 强参数

ruby-on-rails - 如何使用 "nested"或 `namespace`/`scope :module` 路由 `scope :path` 路径?

ruby-on-rails - 将 Rails 服务器从本地机器连接到网络

ruby-on-rails - Rails 中多类型注册的多态关联

ruby-on-rails - 使用 Devise 从 Rails 上的 json api 进行身份验证

ruby-on-rails - Rails 背景色中的 CSS 在正文中不起作用

mysql - 托管在 Heroku 上的 Rails 应用程序的地理空间和全文搜索

laravel - Laravel Eloquent 多态一对一?

ruby-on-rails - 升级到Rails 4.1之后,将新的多态关联与父级一起保存时是无效的

ruby-on-rails - Rails 4 需要和允许多个