rake db:seed
tz's Introduction
tz's People
tz's Issues
Стиль кода
Нужно настроить редактор так, чтобы он
- всегда использовал пробелы вместо табов для отступов;
- удалял пробелы в конце строк перед сохранением файла;
- добавлял перевод строки в конец файла, если его нет.
С 1 и 3 вроде все ок, но со 2 - проблема. Можешь использовать rubocop, чтобы посмотреть и исправить все случаи с хвостовыми пробелами.
Также будь внимателен с отступами (см. rubocop).
Стиль кода сильно влияет на его читаемость, что очень важно.
ProfileController и AdminProfileController
У этих двух контролеров есть несколько проблем.
- Похожие методы фильтры.
def all_posts
@posts = Post.where.not(life_cycle: "draft").paginate(page: params[:page])
end
def new_posts
@posts = Post.where(life_cycle: "new_post").paginate(page: params[:page])
end
def publish
@posts = Post.where(life_cycle: "publish").paginate(page: params[:page])
end
def archive
@posts = Post.where(life_cycle: "archive").paginate(page: params[:page])
end
Лучше такую фильтрацию сделать путем передачи нужного параметра через url: /profile?lifecycle=publish
.
2. Методы #transaction
и #transaction_for_approved
делают то, с чем лучше справились бы методы в PostsController. Если сделать экшны для перевода постов между статусами в PostsController и посылать запросы туда, то можно будет всю логику авторизации вынести в ability.rb, избавится от явной проверки роли пользователя и использовать load_and_authorize_resource
.
Если исправить эти 2 пункта, то контролеры можно будет объединить в один и избавиться от проверки роли пользователя, которой не должно быть в контролере, т.к. для этого есть ability.rb.
load_and_authorize_resource, cancan и #set_post в PostsController
#set_post
и .load_and_authorize_resource
делают одно и тоже, только второй работает еще и для #index
экшна.
Нужно оставить только load_and_authorize_resource и во всех методах использовать уже загруженный кэнкэном объект.
N+1 запросы
Если после открытия главной страницы посмотреть в консоль с логом, то можно увидеть такие запросы:
(0.6ms) SELECT COUNT(*) FROM `images` WHERE `images`.`post_id` = 22
(0.2ms) SELECT COUNT(*) FROM `images` WHERE `images`.`post_id` = 23
(0.2ms) SELECT COUNT(*) FROM `images` WHERE `images`.`post_id` = 27
Для каждой объявки делается запрос на изображения. Такие запросы называются N+1 запросами и от них нужно избавляться.
Категории объявок
Хочется иметь возможность добавлять объявки в категории (авто, недвижимость), а затем фильтровать их по категориям.
Аутентификация
Сейчас для аутентификации пользователя в каждом контролере выполняется метод authenticate_user!: before_filter :authenticate_user!
. Так как в большинстве контролеров аутентификация нужна, так делать не очень безопасно, т.к. всегда есть риск забыть добавить аутентификацию к новому контролеру.
Лучше добавить before_filter :authenticate_user!
в ApplicationController, но когда к каким-то экшнам нужно дать доступ неаутентифицированным пользователям, можно проверку аутентификации пропустить: skip_before_filter :authenticate_user!, only: [:show, :index]
.
Интеграционные тесты
Ишью-напоминание об интеграционных тестах. Хочется видеть покрытие следующих действий:
- Создание, просмотр, редактирование, смена статусов объявок пользователем.
- Одобрение и публикация объявок админом.
- Сортировка объявок.
- Фильтрация объявок по категориям.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.