Несколько внешних ключей, ссылающихся на ту же таблицу в RoR

Чтобы проверить несколько каталогов, используйте этот код:

if [ -d "$DIRECTORY1" ] && [ -d "$DIRECTORY2" ] then
    # Things to do
fi
34
задан titaniumdecoy 30 January 2010 в 12:39
поделиться

3 ответа

По-моему, это похоже на отношения has_many - положите вместо этого в таблицу адресов Client_id.

Customer
  has_many :addresses

Address
  belongs_to :customer

Вы также можете указать иностранный ключ и класс в декларации assoc

Customer
   has_one :address
   has_one :other_address, foreign_key => "address_id_2", class_name => "Address"
26
ответ дан 27 November 2019 в 06:32
поделиться

В направляющих 5.1 или больше можно сделать это как это:

Миграция

create_table(:customers) do |t|
    t.references :address, foreign_key: true
    t.references :address1, foreign_key: { to_table: 'addresses' }
end

Это создаст поля address_id, и address1_id и сделает ссылки уровня базы данных на addresses Модели таблицы

class Customer < ActiveRecord::Base
  belongs_to :address
  belongs_to :address1, class_name: "Address"
end

class Address < ActiveRecord::Base
  has_many :customers,
  has_many :other_customers, class_name: "Customer", foreign_key: "address1_id"
end

FactoryBot

при использовании FactoryBot тогда фабрика могла бы выглядеть примерно так:

FactoryBot.define do
  factory :customer do
    address
    association :address1, factory: :address
  end
end
1
ответ дан 27 November 2019 в 06:32
поделиться

Я понял, как это сделать благодаря Тоби:

class Address < ActiveRecord::Base
  has_many :customers
end
class Customer < ActiveRecord::Base
  belongs_to :billing_address, :class_name => 'Address', :foreign_key => 'billing_address_id'
  belongs_to :shipping_address, :class_name => 'Address', :foreign_key => 'shipping_address_id'
end

Таблица клиентов включает столбцы shipping_address_id и billing_address_id.

Это, по сути, отношения has_two. Я нашел этот поток также полезным.

12
ответ дан 27 November 2019 в 06:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: