Несколько внешних ключей в ruby ​​на рельсах - PullRequest
1 голос
/ 30 сентября 2019

У меня проблема при создании моделей. У меня есть 3 модели в приложении Rails.

Первая модель - Event.

class Event < ApplicationRecord
    has_many :items
    has_many :situations
end

Модель Event содержит поля: id, date, team.

Второй класс - Предметы

class Item < ApplicationRecord
    belongs_to :event
    has_many :situations
end

Модель товара содержит поля: event_id, ratio, kind, attr_1, attr_3 с данными.

Третий класс - Ситуации

class Situations < ApplicationRecord
    belongs_to :event
    has_many :items
end

Модель ситуации содержит поля: event_id, first_item_id, second_item_id, third_item_id, percent

Мне нужно создать 3 внешних ключа (first_item_id, second_item_id, third_item_id), которые будут ссылаться нак первичному ключу в модели изделия.

Я попробовал этот код, а затем набрал Item.joins(:situations), и он не работает:

 class Item < ApplicationRecord
   belongs_to :event
   has_many :situations, class_name: 'Situation', foreign_key: ['first_item_id', 
    'second_item_id', 'third_item_id']
 end

Обновление

Например:

  Situations table:

 id event_id first_item_id second_item_id third_item_id percent
  1   1001      2323           2324           2325         3%
  2   1001      2323           2525           2525


  Event table:

  id        date                  team
 1001   02/10/2019        'Chicago - New York'


 Item table:

  id    event_id  ratio    kind   attr_1   att_3
  2323    1001     2.3     test     12       15
  2323    1001     7.7     next     52       55
  2324    1001     8.7     nsext     5       18
  2325    1001     1.1     ext      4        58   

и я хочу получить 2 большие строки с данными со всеми полями из таблицы событий, предметов и ситуаций после выполнения Item.joins (: ситуация).

1 Ответ

1 голос
/ 30 сентября 2019

Когда мы говорим об ассоциации, мы должны определить ассоциацию для отдельных ключей,

class Event < ApplicationRecord
    has_many :items
    has_many :first_for_situations, through: :items
    has_many :second_for_situations, through: :items
    has_many :third_for_situations, through: :items
end

class Item < ApplicationRecord
    belongs_to :event
    has_many :first_for_situations, class_name: 'Item', foreign_key: :first_item_id
    has_many :second_for_situations, class_name: 'Item', foreign_key: :second_item_id
    has_many :third_for_situations, class_name: 'Item', foreign_key: :third_item_id
end

class Situation < ApplicationRecord
    belongs_to :event
    belongs_to :first_item, class_name: 'Item', foreign_key: :first_item_id
    belongs_to :second_item, class_name: 'Item', foreign_key: :second_item_id
    belongs_to :third_item, class_name: 'Item', foreign_key: :third_item_id
end

Если вы хотите получить ActiveRecord::Relation объект для нескольких ключей, используйте метод класса, как показано ниже,

 class Item < ApplicationRecord
   belongs_to :event

   def situations
     where(first_item_id: id, second_item_id: id, third_item_id: id)
   end
 end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...