Я пытаюсь разобраться с областями рельсов. У меня есть простые основы, но я пытаюсь создать немного более сложную область, и у меня возникают некоторые проблемы.
class Client
has_many :referrals, through: :submissions
has_one :address
has_many :submissions
end
class Submission
belongs_to :client
belongs_to :user
has_many :referrals, :inverse_of => :submission, dependent: :delete_all
end
class Referral
belongs_to :branch
belongs_to :submission
has_one :client, through: :submission
end
class Address
belongs_to :client
end
У меня также есть пользователи, созданные с помощью devise. У меня есть настраиваемый атрибут, добавленный для пользователей, который называется city_town
.
Когда пользователь регистрируется, он выбирает, из какого он города или населенного пункта и агентство, в котором он работает. Когда представления создаются, они принимают вложенные атрибуты для сведений о клиенте и адресе, а также сведения о реферале. рефералы принимают Agency_id, который указывает, куда направляется этот реферал.
Чего я пытаюсь добиться, так это создать область, которая будет собирать все рефералы, где referral.client.address.city_town
соответствует городу или городу текущего пользователя, то есть: current_user.city_town
, а Agency_id реферала соответствует Agency_id вошедшего в систему пользователя.
Короче говоря, когда пользователь входит в систему, он может видеть рефералов только для своего агентства и региона.
Пока у меня есть:
class Referral
scope :agency_referrals, -> (id, city_town) { includes(:clients).where(agency_id: id, client.address.city_town => city_town) }
end
но я с болью осознаю, что это далеко не правильно. Я получаю эту ошибку:
undefined local variable or method `client' for #<Class:0x00000003200c08>
Есть идеи, где я ошибаюсь?
includes(:client)
вместоincludes(:clients)
- person Pavan   schedule 17.02.2016delegate :client, to: :submission
вместоhas_one :client, through: :submission
? - person MrWater   schedule 25.02.2017