将模型添加到生产中的应用程序的最佳方法是什么?

时间:2016-04-14 20:53:46

标签: ruby-on-rails

因此我被要求在Rails中为现有模型添加新的分类。我的第一个模型,让我们说帖子需要获得与新模型兴趣的多对多关系,其中存储了某些感兴趣的领域。每个帖子可以有0到多个这些兴趣。此外,在上线时,这些兴趣已被确定为10个利益的固定列表。

创建新模型的最佳方式是什么,并预先填充10个固定感兴趣区域的表格?

我正在考虑使用种子来填充数据库,但我并没有真正体验到这一点。这是正确的方法,还是我错过了什么?

2 个答案:

答案 0 :(得分:1)

由于您的应用程序在实时生产环境中运行,因此最好创建表并使用迁移构建默认关联。播种数据库只应在创建数据库时发生,否则可能会引入重复数据。

class CreateInterests < ActiveRecord::Migration
  def migrate(direction)
    super

    if direction == :up
      ['Iterest 1', 'Interest 2', ..., 'Interest N'].each do |name|
        Interest.create(name: name)
      end

      interests = Interest.all

      Post.all.each do |post|
        post.interests << interests
      end
    end
  end

  def change
    create_table :interests do |t|
      t.integer :name
      t.timestamps null: false
    end

    create_table :interests_posts, :id => false do |t|
      t.integer :interest_id
      t.integer :post_id
    end

    add_index :interests_posts, [:interest_id, :post_id]
  end
end

答案 1 :(得分:0)

你可以使用种子,但对于这么少的初始兴趣对象,我只是在迁移中这样做。

首先创建兴趣模型app/models/interest.rb,然后生成迁移并对其进行编辑,以便在执行rake db:migrate时创建行

class CreateInterests < ActiveRecord::Migration
  def up
    create_table :interests do |t|
      t.string :name
      t.timestamp
    end
    Interest.create(name: "Animals")
    Interest.create(name: "Flowers")
    Interest.create(name: "Dinosaurs")
    # add seven more interests...
  end

  def down
    drop_table :interests
  end
end