Size: a a a

Saint P Ruby Community

2020 April 18

G

Gregory in Saint P Ruby Community
wi11son
Alexis nitro mesh
спасибо, смотрю обзорчик, прикольная. как звук?)
источник

G

Gregory in Saint P Ruby Community
под бочку придумал уже подстилку чтоб соседям не стучало? 😄
источник

w

wi11son in Saint P Ruby Community
чувак, это ж для детей, они особенно и не стучат в бочку
источник

G

Gregory in Saint P Ruby Community
а ну вдруг ты тоже играешь, яж не знаю)
источник

G

Gregory in Saint P Ruby Community
тогда да
источник

w

wi11son in Saint P Ruby Community
нене, я не умею
источник

PP

Pavel Peganov in Saint P Ruby Community
Georgiy Bykov
Добрый вечер!
Есть родительская таблица users и дочерняя tests. Нужно в модулях прописать ассоциации создавая имена методов отличные от названий таблиц. В таблице tests есть колонка внешнего ключа к таблице users под названием author_id. Куда мне нужно добавить foreign_key: :author_id:  в класс User в ассоциацию has_many или в класс Test в belongs_to? Или и туда и туда?
Заранее спасибо!
Вообще способов много. Я б наверное предпочёл

belongs_to :author, class_name: "User"

...чтоб не терять смысл названия колонки в базе (она ж там так названа не просто так? YMMV)
источник

GB

Georgiy Bykov in Saint P Ruby Community
Pavel Peganov
Вообще способов много. Я б наверное предпочёл

belongs_to :author, class_name: "User"

...чтоб не терять смысл названия колонки в базе (она ж там так названа не просто так? YMMV)
Значит в таком случае, мне foreign_key: :author_id нужно прописать в классе User в ассоциацию has_many, верно?
(согласен, не просто так :D просто не пойму где принадлежность внешнего ключа указывать. отсюда и вопрос)
источник

PP

Pavel Peganov in Saint P Ruby Community
Georgiy Bykov
Значит в таком случае, мне foreign_key: :author_id нужно прописать в классе User в ассоциацию has_many, верно?
(согласен, не просто так :D просто не пойму где принадлежность внешнего ключа указывать. отсюда и вопрос)
Это сработает, да.
По-хорошему, это должны понимать ассоциации с обеих сторон, ибо они, емнип, "не общаются". Но способов эту инфу донести может быть несколько.
источник

GB

Georgiy Bykov in Saint P Ruby Community
Pavel Peganov
Это сработает, да.
По-хорошему, это должны понимать ассоциации с обеих сторон, ибо они, емнип, "не общаются". Но способов эту инфу донести может быть несколько.
Один из способов: с двух сторон прописать и не париться? Хотя тогда лишний код, как будто появится 🤔
источник

PP

Pavel Peganov in Saint P Ruby Community
Georgiy Bykov
Один из способов: с двух сторон прописать и не париться? Хотя тогда лишний код, как будто появится 🤔
Нет, с двух сторон приписывать в любом случае (если ассоциация используется с обеих сторон). А вот как именно – возможны вариации.
Для has_many ничего другого в голову не приходит, а для belongs_to можно ещё так: belongs_to :user, foreign_key: :author_id, так ассоциация будет доступна как user. Как я выше сказал, смысл названия колонки не перетёк в метод, а это обычно нехорошо (указывает на разную терминологию в базе и в коде).
источник

PP

Pavel Peganov in Saint P Ruby Community
Но ассоциация может быть запросто определена и только с одной стороны, если хочется. Определения ассоциаций довольно самостоятельны. Поэтому опции необходимые для их работы и надо указывать целиком.
источник

GB

Georgiy Bykov in Saint P Ruby Community
Pavel Peganov
Нет, с двух сторон приписывать в любом случае (если ассоциация используется с обеих сторон). А вот как именно – возможны вариации.
Для has_many ничего другого в голову не приходит, а для belongs_to можно ещё так: belongs_to :user, foreign_key: :author_id, так ассоциация будет доступна как user. Как я выше сказал, смысл названия колонки не перетёк в метод, а это обычно нехорошо (указывает на разную терминологию в базе и в коде).
ааа, так это у меня вроде уже есть. Мне интересно было по поводу внешнего ключа. Хотя может и тут есть ошибки.
Я вот так сделал:
в users: has_many :author_of_tests, class_name 'Test', inverse_of: :author, foreign_key: :author_id
в tests: belongs_to :author, class_name 'User', inverse_of: :author_of_tests, foreign_key: :author_id
источник

PP

Pavel Peganov in Saint P Ruby Community
К одному и тому же внешнему ключу можно прикрутить несколько ассоциаций сразу (добавив фильтрацию или порядок, к примеру) – какую тогда выбирать?
В ассоциированной таблице может быть несколько колонок, связанных с исходной – о какой из них речь?
Не думаю, что тут реальна автоматическая угадайка.
источник

PP

Pavel Peganov in Saint P Ruby Community
Georgiy Bykov
ааа, так это у меня вроде уже есть. Мне интересно было по поводу внешнего ключа. Хотя может и тут есть ошибки.
Я вот так сделал:
в users: has_many :author_of_tests, class_name 'Test', inverse_of: :author, foreign_key: :author_id
в tests: belongs_to :author, class_name 'User', inverse_of: :author_of_tests, foreign_key: :author_id
*authored_tests мб? (Да, author может быть и глаголом!)
источник

PP

Pavel Peganov in Saint P Ruby Community
А в остальном вроде ок.
источник

GB

Georgiy Bykov in Saint P Ruby Community
Pavel Peganov
*authored_tests мб? (Да, author может быть и глаголом!)
🤔
подразумевается, что юзер может являться автором теста(-ов), поэтому я такое название выбрал, типа: @user.author_of_tests чтобы выдало каких тестов он автор.
источник

GB

Georgiy Bykov in Saint P Ruby Community
Pavel Peganov
*authored_tests мб? (Да, author может быть и глаголом!)
а, хотя я понял о чем ты. Видимо, есть какое-то соглашение и там должен быть глагол. Сейчас исправлю)
источник

PP

Pavel Peganov in Saint P Ruby Community
Под вопросом, нужно ли уточнение authored_ в целом, или хватит просто tests (и убрать class_name: "Test"), но зависит от контекста, да и можно безболезненно поменять – код всё-таки, а не база.
Просто "author of tests" читается как "автор тестов", один человек, а вовсе не как множество тестов. "Authored" я использую для описания связи. Это означает приблизительно "созданные (в роли автора) тесты". Это про английский, не про рельсу :) Рельса стерпит, хотя иногда может удивить своим словообразованием.
источник

GB

Georgiy Bykov in Saint P Ruby Community
Pavel Peganov
Под вопросом, нужно ли уточнение authored_ в целом, или хватит просто tests (и убрать class_name: "Test"), но зависит от контекста, да и можно безболезненно поменять – код всё-таки, а не база.
Просто "author of tests" читается как "автор тестов", один человек, а вовсе не как множество тестов. "Authored" я использую для описания связи. Это означает приблизительно "созданные (в роли автора) тесты". Это про английский, не про рельсу :) Рельса стерпит, хотя иногда может удивить своим словообразованием.
у меня уже есть другая связь через :tests, собственно поэтому и делаю новую с другим названием)
да, я понял:)))) что про английский, название то тоже нужно дать говорящие и верное)
источник