Closed alinajuly closed 1 year ago
1) Поки залишив, можливо ментори скажуть що так дійсно, поки не бачу необхідності міняти 2) Виправив дякую) 3) Переписав без валідації, щоб через параметри вже фільтрація була 4) Видалив лишав для себе, щоб запам'ятати як можна викликати скопи з чужих моделей
дякую за відгук)
Якщо ви не плануєте зберігати додаткових даних та діставати або працювати з ними (окрім двох ключів, що обєднують ваші таблиці), то вам вистачить 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).
В цілому - досить охайна робота. Кілька допрацювань
dependent: :destroy
та додайте де це потрібно https://guides.rubyonrails.org/association_basics.html#options-for-belongs-to-dependentcollection do
get :post
post :comment
end
get
. Подібна історія тут https://github.com/xiosky90/RubyHW/blob/main/HW5-6-7/blog-RoR-api/config/routes.rb#L121) Оновив до 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) Додав гем
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
В будь якому випадку є багато способів реалізувати це в вигляді валідації. Такого роду перевіркам не місце в контроллерах
Також ми на занняті пояснювали, чому в такого роду перевірках
Comment.statuses[params[:status]] && params[:status].present?
немає сенсу. Подумайте, та оновіть екшн.
Ще звернув увагу, що ви відправили форму ДЗ8
Те сам для асоціацій в середині серіалайзерів https://github.com/xiosky90/RubyHW/blob/main/HW8/blog-RoR-api/app/serializers/api/v1/author_serializer.rb#L4.
[x] https://api.rubyonrails.org/classes/ActiveRecord/Enum.html і так поверне помилку, перевірте самі та подумайте над https://github.com/xiosky90/RubyHW/blob/main/HW8/blog-RoR-api/app/models/article.rb#L11
[x] Почитайте про https://docs.actian.com/zen/v15/index.html#page/sqlref/sqlref.LIKE_and_ILIKE.htm та подумайте що тут зайве https://github.com/xiosky90/RubyHW/blob/main/HW8/blog-RoR-api/app/models/article.rb#L15
ДЗ 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 бо він не чутливий до регістра
Дякую за виправлення і підсказки.
Круто, гарна робота! Згодом ДЗ8 повноцінно заревювить хтось з менторів. Думаю, це ішю можна закрити
Єдине, що помітив. Не знаю чи згадували ми раніше, але ніколи не варто пушити закоментований код, наприклад https://github.com/xiosky90/RubyHW/commit/9d8a4cfa68ec58d5a8e04a00efa1e8df84c8cc6f#diff-cafb50b53b122571fa0d178f18c5a8990ce9e7f80c25a70a86a725808262413dR106-R108. Закоментований код можна пушити в репозиторій лише, якщо це пояснення коду або TODO
[ ] Для тегів краще використати асоціацію has_many :through
[x] Запити на колекції мають бути до своїх моделей @articles = Article.filter_articles_by_tag(params[:tag]) if params[:tag].present?
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