GithubHelp home page GithubHelp logo

tz's Introduction

README

rake db:seed

tz's People

Contributors

sashakovryga avatar

Watchers

 avatar

tz's Issues

Стиль кода

Нужно настроить редактор так, чтобы он

  1. всегда использовал пробелы вместо табов для отступов;
  2. удалял пробелы в конце строк перед сохранением файла;
  3. добавлял перевод строки в конец файла, если его нет.

С 1 и 3 вроде все ок, но со 2 - проблема. Можешь использовать rubocop, чтобы посмотреть и исправить все случаи с хвостовыми пробелами.

Также будь внимателен с отступами (см. rubocop).

Стиль кода сильно влияет на его читаемость, что очень важно.

ProfileController и AdminProfileController

У этих двух контролеров есть несколько проблем.

  1. Похожие методы фильтры.
  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].

Интеграционные тесты

Ишью-напоминание об интеграционных тестах. Хочется видеть покрытие следующих действий:

  1. Создание, просмотр, редактирование, смена статусов объявок пользователем.
  2. Одобрение и публикация объявок админом.
  3. Сортировка объявок.
  4. Фильтрация объявок по категориям.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.