-
Notifications
You must be signed in to change notification settings - Fork 138
fix duplication of solutions, issue #1681 #1738
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
1aa762f to
f1a45ce
Compare
| </div> | ||
|
|
||
| @if (count($solutionsListForCurrentExercise) > 1) | ||
| @if (count($solutionsOfOtherUsers ?? []) > 0) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
в solutionsOfOtherUsers у тебя в любом случае должен быть определени, тк там из базы берется, то будет eloquent collection, на которой можно вызвать метод проверки на пустоту.
| </ul> | ||
| <div class="tab-content" id="pills-tabContent"> | ||
| @foreach ($solutionsListForCurrentExercise as $currentSolution) | ||
| @foreach ($solutionsOfOtherUsers as $currentSolution) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
тут в двух местах переименовывается переменая. Но, хм странно. Ведь получается что в solutionsListForCurrentExercise - решения пользователя, у которого страницу открываем users/1/solutions - для id 1, а в other - для всех остальных. Получается, что нам нужны обе переменных, ведь мы сравниваем решение текущего пользователя и другого.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Изначально там было два одинаковых блока с solutionsListForCurrentExercise, поэтому и дублировались решения юзера и собстенно в этом была ошибка. А я во втором блоке заменил solutionsListForCurrentExercise на solutionsOfOtherUsers, чтобы вначале показывалось решение юзера, а следом в следующем блоке решения других пользователей.
Тут в дифе показаны только мои изменения во втором блоке и не виден первый блок с solutionsListForCurrentExercise, потому что я его не трогал.
|
@rnik82 давай попробуем улучшить текущую страничку. Сейчас у нас два таба и идея была в том, чтобы сравнить два решения. Свое и чужое. Сейчас получается при любых раскладах у тебя не выводится второй таб https://hexlet-sicp-449a.onrender.com/solutions/28 |
@fey, странно. У меня показывает решения и юзера и других пользователей если они есть (см скрин) Вопрос: как лучше назвать решения других польователей? Потому что v.1, v.2, v.3... как то не очень. Может просто 1, 2, 3...?
Сейчас если мы заходим в свои решения, то там показаны только те, которые мы сохранили. То есть нам просто не показывает в списке никаких других решений, в том числе тех, которые мы прорешали но не сохранили. То есть ты предлагаешь выводить в списке все, которые мы решили, не важно сохраняли или нет. Я правильно понял?
То есть тут будет не как на Хекслете, а как-то по другому? Там всегда показывает "Ваше решение" (можно пощелкать разные версии), а рядом всегда "Решение учителя". Вроде там не было такого, что ты смотришь только свои решения без решений учителя. |
974af5a to
20a0881
Compare
не, если мы сохранили это все верно. Ведь мы не можем показать то, что не сохранили
Да, стоит сделать слева и справа, чтобы было удобно сравнивать. А сверху-снизу для мобилок/узких экранов.
Можно выводить решение учителя, но это уже можно второй версией (след пр). |
Открываю https://hexlet-sicp-449a.onrender.com/ru/solutions/24 Проверь, что у тебя задеплоена актуальная версия. |
|
@fey, там оказалось что есть два обработчика show, которые используют один и тот же шаблон: Соответственно, если мы заходим, например, сюда - https://hexlet-sicp-449a.onrender.com/ru/solutions/31 А если сюда - https://hexlet-sicp-449a.onrender.com/ru/users/11/solutions/31, По хорошему, тут, наверное, два отдельных шаблона нужно делать. Я там вчера немного изменил сам шаблон, и сделал две колонки. Код только что обновил на рендере. |
|
@fey, наверное, без твоего мнения не обойтись. Как я уже писал, у нас есть два обработчика, два маршрута и один шаблон. Вот первый вариант зайти на страницу Код ревью: Вот второй: Мое предложение, разделить шаблоны. Что скажешь? Или тут была совсем другая идея? |
Давай разделим. Чемто не помню какая идея была. Может быть в ищщусаъ/ПРах есть комменты. |
32e682a to
a70a51a
Compare
| $this->authorizeResource(Solution::class, 'solution'); | ||
| $this->authorizeResource(Solution::class, 'solution', [ | ||
| 'except' => ['show'], | ||
| ]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
давай сделаем здесь через only. Белые списки проще менеджерить. И если появится кастомный не ресурсный роут, то он по дефолту будет закрыт.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Делаю 'only' => ['store', 'destroy'], вместо 'except' => ['show'] и опять получаю ошибку 403 This action is unauthorized. Хз в чем дело.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@fey, если нужно чтобы все работало через $this->authorizeResource в конструкторе, то проще оставить 'except' => ['show']. Если мы добавляем 'only' => ['store', 'destroy'], то не работает, так как у нас больше одного параметра в методах store и destroy (помимо solution еще есть user). Либо можно вручную в этих методах policy подключить - $this->authorize('create', Solution::class) и $this->authorize('delete', $solution). Тогда тогда тоже работает норм. Или может подскажешь что-то еще?
| return view('solution.show', compact( | ||
| $solutionsOfOtherUsers = $solution->exercise | ||
| ->solutions() | ||
| ->where('user_id', '!=', $user->id) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
можно сразу whereNot использовать https://laravel.com/docs/12.x/queries#where-not-clauses
|
|
||
| $currentExercise = $solution->exercise; | ||
|
|
||
| $solutionsListForCurrentExercise = $solution->exercise |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
давай вот эту переменную переименуем сразу, тк у нас появляется две переменных с разным смыслом.
Ведь здесь не все решения для текущ упражнения.
| $otherSolutionIds = $otherSolutions->pluck('id')->sort()->values()->all(); | ||
|
|
||
| return $solutionIds === $otherSolutionIds; | ||
| }); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Давай уберем провери с whereHas. Без них наше тесты более гибкие, нам достаточно просто что ответ ok. А если нужно что-то проверять на странице, это можно делать системными тестами (браузерными).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@fey так то, в принципе, там уже есть такой тест:
public function testShow(): void
{
$solution = $this->user->solutions()->first();
$response = $this->get(route('users.solutions.show', [$this->user, $solution]));
$response->assertOk();
}
Тогда мой вообще не нужен?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Давай, если так считаеш)
0a80bb7 to
95f3349
Compare
|
@rnik82 можешь зарезолвить ветки, где поправил. И почистить от закомментированного кода, потом пингануть снова, я еще раз гляну. |






Pull request details
Removed the duplication of the solution on the code review page and fixed the solution comparison mechanism.
For guests added "Log in to see the solution" stub.
Issues fixed
Fix two issues #1681 and #1766
Link to demo
https://hexlet-sicp-449a.onrender.com