#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: