0

我已经阅读了很多关于此以及迁移指南和 api 的 SO 问题,但并不清楚。大多数答案都假设您有两个实体的模型和表。我从头开始,所以需要一个完整的解决方案。我有毒品和毒品课程。药物可以有很多药物类别,药物类别有很多药物。设置它的最佳方法是什么?我想使用rails生成。

使用:ruby 1.9.3p286(2012-10-12 修订版 37165)[x86_64-darwin11.4.0] Rails 4.0.0.beta1

我在哪里可以使用 generate 以及在哪里生成一些东西来开始然后编辑由 generate 命令创建的文件?

我不明白拥有和属于许多和拥有许多之间的区别。

我跑了这么远......

Switched to branch 'DrugClasses'
➜  lm git:(DrugClasses) ✗ rails generate model Drug name:string
  invoke  active_record
  create    db/migrate/20130502191118_create_drugs.rb
  create    app/models/drug.rb
  invoke    rspec
  create      spec/models/drug_spec.rb
  invoke      factory_girl
  create        spec/factories/drugs.rb
➜  lm git:(DrugClasses) ✗ rails generate model Drug_Class name:string
  invoke  active_record
  create    db/migrate/20130502191208_create_drug_classes.rb
  create    app/models/drug_class.rb
  invoke    rspec
  create      spec/models/drug_class_spec.rb
  invoke      factory_girl
  create        spec/factories/drug_classes.rb
➜  lm git:(DrugClasses) ✗ rails generate model Drugs_Drug_Classes drug:references drug_class:references
  invoke  active_record
  create    db/migrate/20130502191606_create_drugs_drug_classes.rb
  create    app/models/drugs_drug_classes.rb
  invoke    rspec
  create      spec/models/drugs_drug_classes_spec.rb
  invoke      factory_girl
  create        spec/factories/drugs_drug_classes.rb
➜  lm git:(DrugClasses) ✗ 

这是生成的。

➜  lm git:(DrugClasses) ✗ cat db/migrate/20130502191118_create_drugs.rb 
class CreateDrugs < ActiveRecord::Migration
  def change
    create_table :drugs do |t|
      t.string :name

      t.timestamps
    end
  end
end
➜  lm git:(DrugClasses) ✗ cat db/migrate/20130502191208_create_drug_classes.rb 
class CreateDrugClasses < ActiveRecord::Migration
  def change
    create_table :drug_classes do |t|
      t.string :name

      t.timestamps
    end
  end
end
➜  lm git:(DrugClasses) ✗ cat db/migrate/20130502191606_create_drugs_drug_classes.rb 
class CreateDrugsDrugClasses < ActiveRecord::Migration
  def change
    create_table :drugs_drug_classes do |t|
      t.references :drug, index: true
      t.references :drug_class, index: true

      t.timestamps
    end
  end
end
➜  lm git:(DrugClasses) ✗ 

我还没有运行 rake db:migrate。如果我做错了,我该如何回滚到正确的位置?只是删除创建的文件?如您所见,我可以将分支丢弃,因为我刚刚创建了它。

提前致谢!

_ _ __更新_ __ _ __

好的,我销毁了以前的(rails destroy model Drugs_Drug_Classes),而是这样做了:

rails g migration CreateJoinTableDrugDrugClass drug drug_class

它生成了这个: class CreateJoinTableDrugDrugClass < ActiveRecord::Migration def change create_join_table :drugs, :drug_classes do |t| # t.index [:drug_id, :drug_class_id] # t.index [:drug_class_id, :drug_id] end end end

  1. 为什么索引被注释掉了?我运行了迁移并且实际上创建了索引(我在架构中看到它们)。这很混乱!

  2. 为什么这种迁移不向 Drug 和 DrugClass 模型添加关联?!

4

0 回答 0