我已经阅读了很多关于此以及迁移指南和 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
为什么索引被注释掉了?我运行了迁移并且实际上创建了索引(我在架构中看到它们)。这很混乱!
为什么这种迁移不向 Drug 和 DrugClass 模型添加关联?!