Я пытаюсь научиться писать области в приложении Rails 4.Rails 4 - как написать область для исключения одной записи
У меня есть модели под названием «Пользователь», «Профиль», «Проект» и «Потенциальное использование». Ассоциации являются:
Пользователь
has_one :profile
has_many :potential_uses
Профиль
belongs_to :user
has_many :projects
Проект
belongs_to :profile
has_many :potential_uses
Потенциальный Использует
belongs_to :project
belongs_to :user
У меня есть атрибуты в моей потенциальном использовании таблицы для:
:comment
:internal_comments_permitted
:external_comments_permitted
У меня есть области в моем потенциале использует модель:
scope :internal_comments_permitted, -> where(:internal_comments_permitted => 'true')
scope :external_comments_permitted, -> where(:external_comments_permitted => 'true')
то у меня есть метод класса для нахождения всех комментариев третьих лиц :
def third_party_comments
self.internal_comments_permitted.external_comments_permitted
end
Теперь я пытаюсь написать сферу, чтобы исключить какие-либо комментарии, сделанные пользователем, который имеет профиль, что проект принадлежит, из группы замечаний третьих лиц.
Я хочу, чтобы страница просмотра показывала комментарии сторонних разработчиков отдельно от комментариев создателя проекта.
scope :third_party_comments, -> where(:comment.user_id != potential_uses.project.profile.user_id)
Я знаю, что это неправильно, но я не могу понять, что не так с этой попыткой.
Принимая предложение Hasmukh с в подстройке от Ниниги:
scope :third_party_comments, ->(potential_uses.project.profile.user_id) { where.not(comments: {user_id: potential_uses.project.profile.user_id}) }
, но это дает ошибку, которая говорит:
syntax error, unexpected '.', expecting ')'
...ty_comments, ->(potential_uses.project.profile.user_id) { wh...
@Taryn_East Спасибо за это предложение. Несколько раз я читал все руководства. Я просто перечитаю Руководство по интерфейсу запросов к активной записи - я не могу найти ничего в руководстве, которое объясняет, что означает первый хэш в where(). Что означает «<>»? Спасибо еще раз за помощь. – Mel
Я попробовал предложение. Я получаю сообщение об ошибке (для которого я еще не понял, как перевести на английский): синтаксическая ошибка, неожиданное '(', ожидающее ключевое слово_до_LAMBDA или tLAMBEG ... third_party_comments, -> где ("comment.user_id <>? ", pote ... ... – Mel
Я расскажу подробнее ... –