oleksiimikhno / RubyHW

0 stars 0 forks source link

RubyHW/HW5-6-7/blog-RoR-api/ #7

Closed alinajuly closed 1 year ago

alinajuly commented 1 year ago

https://github.com/xiosky90/RubyHW/blob/a47ae93071431a8bce7ffc72d90d0faf3e8bda22/HW5-6-7/blog-RoR-api/app/controllers/api/v1/articles_controller.rb#L8

https://github.com/xiosky90/RubyHW/blob/9b16fea151e56881c6dcb50ecddbbea01a4dd0d7/HW5-6-7/blog-RoR-api/app/controllers/api/v1/articles_controller.rb#L7-L8

https://github.com/xiosky90/RubyHW/blob/9b16fea151e56881c6dcb50ecddbbea01a4dd0d7/HW5-6-7/blog-RoR-api/app/models/article.rb#L7-L8

oleksiimikhno commented 1 year ago

1) Поки залишив, можливо ментори скажуть що так дійсно, поки не бачу необхідності міняти 2) Виправив дякую) 3) Переписав без валідації, щоб через параметри вже фільтрація була 4) Видалив лишав для себе, щоб запам'ятати як можна викликати скопи з чужих моделей

дякую за відгук)

Kashoid23 commented 1 year ago

Якщо ви не плануєте зберігати додаткових даних та діставати або працювати з ними (окрім двох ключів, що обєднують ваші таблиці), то вам вистачить has_and_belongs_to_many

The simplest rule of thumb is that you should set up a has_many :through relationship if you need to work with the relationship model as an independent entity. If you don't need to do anything with the relationship model, it may be simpler to set up a has_and_belongs_to_many relationship (though you'll need to remember to create the joining table in the database).

В цілому - досить охайна робота. Кілька допрацювань

oleksiimikhno commented 1 year ago

1) Оновив до pluck 2) Додав асоціації dependent: :destroy 3) Переробив на варіант @comment.update(status: params[:status]) if Comment.statuses[params[:status]] && params[:status].present? 4) Залишив тільки !@article.tags.all_tags_names.include?(params[:tag]) була перевірка чи є таке ім'я в самих тегах і потім в тегах артіклах. Не знайшов як це релізувати через валідацію додатково 5) Додав блоки в роути 6) Виправив на post запит 7) Додав гем

Kashoid23 commented 1 year ago

4

На рівні моделі Tag у вас же є uniqueness: true, хіба валідація не спрацьовує? https://guides.rubyonrails.org/active_record_validations.html#uniqueness

Якщо там нестед параметри, то можна спробувати додати валідації на рівні Article також, типу (лише приблизний приклад) validates_uniqueness_of :name, allow_blank: false, scope: :tags

Або кастомну валідацію https://guides.rubyonrails.org/active_record_validations.html#custom-methods

В будь якому випадку є багато способів реалізувати це в вигляді валідації. Такого роду перевіркам не місце в контроллерах

Kashoid23 commented 1 year ago

Також ми на занняті пояснювали, чому в такого роду перевірках Comment.statuses[params[:status]] && params[:status].present? немає сенсу. Подумайте, та оновіть екшн.

Kashoid23 commented 1 year ago

Ще звернув увагу, що ви відправили форму ДЗ8

Те сам для асоціацій в середині серіалайзерів https://github.com/xiosky90/RubyHW/blob/main/HW8/blog-RoR-api/app/serializers/api/v1/author_serializer.rb#L4.

oleksiimikhno commented 1 year ago

ДЗ 7

4) Пробую ще рішити це питання при коді @tags = @article.tags << Tag.where(name: params[:name]) воно може в артикель дублі тегів додавати. Якщо сам дубльований тег спробувати додавати в таблицю тегів то [uniqueness] спрацьовує

ДЗ 8 1) Прибрав Comment.statuses[params[:status] 2) Додав serializer і each_serializer в контролери і в асоціації в самих серіалайзерів 3) Прибрав валідацію validates :status, ви праві помилку і так видає, якщо немає таких статусів в enum 4) Прибрав lowe() з запита і downcase, змінив LIKE to ILIKE бо він не чутливий до регістра

Дякую за виправлення і підсказки.

Kashoid23 commented 1 year ago

Круто, гарна робота! Згодом ДЗ8 повноцінно заревювить хтось з менторів. Думаю, це ішю можна закрити

Kashoid23 commented 1 year ago

Єдине, що помітив. Не знаю чи згадували ми раніше, але ніколи не варто пушити закоментований код, наприклад https://github.com/xiosky90/RubyHW/commit/9d8a4cfa68ec58d5a8e04a00efa1e8df84c8cc6f#diff-cafb50b53b122571fa0d178f18c5a8990ce9e7f80c25a70a86a725808262413dR106-R108. Закоментований код можна пушити в репозиторій лише, якщо це пояснення коду або TODO