Хэш-условие Rails ActiveRecord

Я действительно не понимаю некоторые учебные коды, несмотря на то, что запускаю их эквиваленты на консоли (которые не работают), и нет никаких объяснений.

Это взято из руководств по Rails, и мне очень нравится понимать все, что я читаю.

Article.where(author: author)
Author.joins(:articles).where(articles: { author: author })

Часть (автор: автор) - это то, где я теряюсь. Я имею в виду, делает ли это самосоединение? Если это так, я не могу сделать это на своей консоли с тем же синтаксисом.

И если author: author означает article.author и Author.author (что было бы странно из-за двусмысленности.

Спасибо, извините, если это было опубликовано ранее.


person mateo_io    schedule 16.03.2016    source источник
comment
Кстати, если в учебнике, из которого вы читаете это, есть комментарии, стоит сообщить автору о вашем замешательстве, они должны оценить обратную связь, и вы можете помочь другим, попавшим в такое же замешательство.   -  person toomanyredirects    schedule 17.03.2016


Ответы (1)


Article.where(author: author)

^- Выберите записи статей данного автора.

Выберите записи статей, в которых столбец author_id (вероятно) равен «идентификатору автора». Теперь author (после :) может быть локальной переменной или вызовом метода, возвращающим объект «автор». В любом случае, это, вероятно, экземпляр класса модели Author, который отвечает на вызов метода id.

Author.joins(:articles).where(articles: { author: author })

^- Выберите записи авторов для авторов, у которых есть статья. Здесь снова author (после :) — это локальная переменная или вызов метода. articles: { author: author } — это просто удобный способ указать некоторые критерии для объединения.

Как только вы отсортируете правильную переменную author, добавьте .to_sql в конец цепочки вызовов методов в вашей консоли, чтобы увидеть, какой SQL генерируется. Это должно помочь вам понять, что происходит.

person Lucas Nelson    schedule 16.03.2016
comment
Я использовал article как экземпляр модели Article, и это сработало. SQL говорит, что это сработало, но я не вижу комментариев как части объединенной таблицы. Я могу, позвонив в a.comments, но я мог сделать это и раньше. Но спасибо за ваш комментарий, это работает, и я, по крайней мере, понимаю достаточно, чтобы не беспокоить меня. - person mateo_io; 17.03.2016
comment
Возможно, стоит отредактировать ваш вопрос, чтобы расширить информацию о том, что вы делаете с этими вызовами ActiveRecord, если еще какое-то объяснение поможет… - person Lucas Nelson; 17.03.2016