Rails 5 проверяет, существует ли запись в отношениях belongs_to?

#ruby-on-rails #ruby #activerecord #ruby-on-rails-5

#ruby-on-rails #ruby #activerecord #ruby-on-rails-5

Вопрос:

У меня есть учетная запись 3 моделей, план и пользователь (И я не могу изменить структуру модели отношений, но добавить области или методы)

 Account 
belongs_to :plan

Plan
belongs_to :user

User
has_may :plans
  

Я хочу знать, СУЩЕСТВУЕТ ЛИ учетная запись с определенным идентификатором пользователя

Учетная запись.существует?…….. // вот моя проблема

Комментарии:

1. В таблице accounts в базе данных отсутствует столбец user_id. Сначала вы должны получить все планы, принадлежащие учетной записи, а затем вы должны проверить, есть ли в этих планах конкретный пользователь, которого вы ищете. пожалуйста, проясните свой вопрос. кроме того, вы хотите перемещаться между моделями, я предлагаю добавить has_many связь между моделями. Я рекомендую ознакомиться со следующим, если вы не знакомы с этой концепцией: guides.rubyonrails.org/association_basics.html

Ответ №1:

Я бы присоединился к таблицам базы данных, используя, joins что приводит к INNER JOIN в SQL, а затем добавил условие для user_id рассматриваемого:

 Account.joins(plan: :user).where(users: { id: user_id }).exists?
  

Прочитайте об этом joins в руководствах Rails.

Ответ №2:

Вы можете создавать косвенные ассоциации, которые связывают учетную запись и пользователя через модель плана:

 class Account < ApplicationRecord
  belongs_to :plan
  has_one :user, through: :plan
end

class Plan < ApplicationRecord
  belongs_to :user
end

class User < ApplicationRecord
  has_may :plans
  has_many :accounts, through: :plans
end
  

Это позволит вам запросить:

 Account.joins(:user)
       .where(users: { id: user_id })
       .exists?
  

ActiveRecord автоматически обработает присоединение через таблицу планов.

Смотрите руководства по Rails: