我正在开发Shopify应用程序,我正在尝试在我的数据库中创建一个关系,我有一个商店模型和一个地址模型,一个商店可以有不同的地址,每个地址都与一个商店有关。< / p>
所以我有这个:
模型/ shop.rb
class Shop < ActiveRecord::Base
include ShopifyApp::SessionStorage
has_many :addresses
end
模型/ address.rb
class Address < ApplicationRecord
belongs_to :shop
end
分贝/迁移/ create_shops.rb
class CreateShops < ActiveRecord::Migration[5.1]
has_many :addresses
def self.up
create_table :shops do |t|
t.string :shopify_domain, null: false
t.string :shopify_token, null: false
t.timestamps
end
add_index :shops, :shopify_domain, unique: true
end
def self.down
drop_table :shops
end
end
分贝/迁移/ create_shops.rb
class CreateAddresses < ActiveRecord::Migration[5.1]
def change
create_table :addresses do |t|
t.text :Address1
t.text :Address2
t.string :Postal
t.string :Phone
t.string :City
t.timestamps
end
end
end
我想我没有这个...... 那么,如何在我的数据库中为商店添加地址?
谢谢。
答案 0 :(得分:0)
我想在这里:
class CreateShops < ActiveRecord::Migration[5.1]
has_many :addresses
def self.up
create_table :shops do |t|
t.string :shopify_domain, null: false
t.string :shopify_token, null: false
t.timestamps
end
add_index :shops, :shopify_domain, unique: true
end
def self.down
drop_table :shops
end
end
你不想要has_many :addresses
。这个:
class CreateAddresses < ActiveRecord::Migration[5.1]
def change
create_table :addresses do |t|
t.text :Address1
t.text :Address2
t.string :Postal
t.string :Phone
t.string :City
t.timestamps
end
end
end
应该是这样的:
class CreateAddresses < ActiveRecord::Migration[5.1]
def change
create_table :addresses do |t|
t.references :shop
t.string :address_1
t.string :address_2
t.string :postal
t.string :phone
t.string :city
t.timestamps
end
end
end
正如@engineersmnky在评论中所提到的,从Rails 5开始,将在外键上自动创建索引。
对于未来可能不会使用Rails 5的读者(或者更晚,取决于您将来有多远),他们想要为外键添加索引......
如果您使用的是Rails 4.x,请执行以下操作:
class CreateAddresses < ActiveRecord::Migration
def change
create_table :addresses do |t|
t.references :shop, index: true
t.string :address_1
t.string :address_2
t.string :postal
t.string :phone
t.string :city
t.timestamps
end
end
end
如果您早于Rails 4.x,请参阅this question and answer。