【发布时间】:2013-01-09 09:39:39
【问题描述】:
我在同一个 Rails 项目上使用 SQLite3 和 MySQL,但在两台不同的计算机上。我注意到,当我运行所有迁移时生成的 schema.rb 在两种环境中看起来都不同。当我在 SQLite3 环境中运行迁移时,从schema.rb 文件中删除了以下语句。
add_index "places", ["user_id"], :name => "places_user_id_fk"
add_foreign_key "places", "users", :name => "places_user_id_fk"
请注意,我使用的是 foreigner gem,它使用 add_foreign_key 和 remove_foreign_key 扩展了迁移。
以下是与问题相关的迁移和模型:
# 20130123004056_create_places.rb
class CreatePlaces < ActiveRecord::Migration
def change
create_table :places do |t|
t.string :name
t.string :location
t.integer :user_id
t.timestamps
end
end
end
...
# 20130123234250_add_foreign_key.rb
class AddForeignKey < ActiveRecord::Migration
def change
add_foreign_key(:places, :users)
end
end
...
# user.rb
class User < ActiveRecord::Base
has_many :places
end
...
# place.rb
class Place < ActiveRecord::Base
belongs_to :user
end
问题:如何定义users 和places 之间的关系,SQLite3 和 MySQL 都可以处理?
【问题讨论】:
-
add_foreign_key不是 Rails 的一部分。这是哪里来的? -
@Deefour 对不起,我忘了提到我使用的 gem。
标签: mysql ruby-on-rails sqlite rails-migrations foreigner