从一开始就锁定多对多的关系(所有模型创建)

时间:2013-05-02 19:36:59

标签: ruby-on-rails activerecord many-to-many has-and-belongs-to-many

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

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

我在哪里可以使用generate,我在哪里生成要启动的内容,然后编辑generate命令创建的文件?

我没有区分has和属于很多并且有很多通过。

我跑到目前为止......

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。如果我做错了,我该如何回到正确的位置?只需删除创建的文件?当你看到我刚创建它时,我可以把分支丢弃。

提前致谢!

__ _ __ 更新 _ < / EM> __ _ __

好的,我销毁了之前的(rails destroy模型Drugs_Drug_Classes),而是做了这个:

rails g migration CreateJoinTableDrugDrugClass drug drug_class

它产生了这个:     class CreateJoinTableDrugDrugClass&lt; ActiveRecord的::迁移       改变         create_join_table:drug,:drug_classes do | t |           #t.index [:drug_id,:drug_class_id]           #t.index [:drug_class_id,:drug_id]         结束       结束     端

  1. 为什么索引被注释掉了?我运行了迁移并且实际创建了索引(我在模式中看到它们)。那令人困惑!

  2. 为什么这次迁移不会为Drug和DrugClass模型添加关联?

0 个答案:

没有答案