• Как отдать картинку в json с rails API?

    POS_troi
    @POS_troi
    СадоМазо Админ, флудер, троль.
    Отдавайте урл и пущай качают, нифиг пихать невпихуемое в места не предназначенные для этого :)
    Ответ написан
    Комментировать
  • Прошу объяснить, как работает self и protected в Ruby?

    viktorvsk
    @viktorvsk
    Public - должны использоваться очень аккуратно. Чем меньше - тем лучше. Это внешнее API для других классов, которые будут его использовать. А чем меньше можно узнать, тем быстрее это можно выучить и запомнить, тем меньше ошибок сделать.

    Protected - это те методы, которые доступны потомкам (классам, что наследуют), но не доступны внешним классам. Грубо говоря, удобно, когда вы знаете, что от класса А будут наследовать много-много разных классов, и у этих классов будет один (или много, не важно) общий метод. Который, однако, совершенно не нужен внешним классам. Если бы не было протектеда, было бы 2 пути - сделать метод, который должен быть у всех потомков - публичным. Это плохо, потому что это лишняя информация для внешних классов. Или же - дублировать одинаковые методы в каждом классе потомке. Это плохо, потому что не DRY.

    Private - это те методы, который доступны только классу. То есть, грубо говоря, пользоваться ими вы можете только в том же файле, где идет определение класса. Например, удобно ими пользоваться для рефакторинга. Представим, что есть публичный метод, который уже много лет используют 100 разных, неизвестных классов. Но в этом методе - 500 строк. Менять метод нельзя, поэтому вы превращаете его в 10 строк-вызовов приватных методов.

    Лучше всего это усвоить, создав разные вариации и попробовав повызывать разные методы. 2 важных вещи, которые нужно помнить в Ruby:
    1) Разные ключевые слова для методов класса и экземпляра (private, private_class_method)
    2) Если тестируете поведение в консоли с использованием #send, то поведение будет не ООП-шное - #send игнорирует видимость методов

    С self все проще. По умолчанию, всегда self подставляется. Метод вызывается сначала для текущего объекта - потом смотрится наличие методов в предке и т.д. и т.д. до объекта Object. Зачем иногда явно пишут self ? Потому что в руби можно создавать методы вида def method=() end; и использовать их с пробелом: method = 2. Для этого, что бы дать понять, что используется именно метод, а не определяется локальная переменная, иногда прибегают к полной записи.

    P.S. Если что-то действительно не понятно даже здесь - берите любую книгу по ООП или википедию и пробуйте все в консоли на любом языке программирования, пока не уловите суть.
    Ответ написан
    4 комментария
  • Связать модели через имя одной из модели, а не через id?

    premas
    @premas
    Full-stack web-developer
    Зачем вам переопределять ключи для этого? Это очень нехорошо. В связи добавьте или foreign_key или association_foreign_key в зависимости от типа связи.
    Ответ написан
    3 комментария
  • Как реализовать роутинг и связь между моделями?

    Jeiwan
    @Jeiwan
    /user/id1/create_event — это не Rails-way. В рельсах уже всё придумано за вас:
    resources :users do
      resources :events
    end

    В общем, обычный вложенный ресурс. Для создания события использовать экшен create контроллера EventsController. Путь будет /users/:id/events, метод POST.
    В контролллере EventsController в экшенах события искать через пользователя, т. е. (пример для show):
    @user = User.find(params[:id]])
    @event = @user.events.find(params[:event_id])

    Путь для show будет /users/:id/events/:event_id.
    Всё стандартно и обычно. Советую выучить www.rusrails.ru/rails-routing
    Ответ написан
    Комментировать
  • Как получить сумму значений по группе из таблицы?

    AMar4enko
    @AMar4enko
    Как насчет .group('FLOOR(UNIX_TIMESTAMP(created_at) / 3600)')
    Ответ написан
    Комментировать
  • Rails 4. Проблема со связкой websocket-rails и authlogic. Что делать?

    MAXOPKA
    @MAXOPKA Автор вопроса
    Ура! Нашел решение.
    Оказывается объект унаследованный от WebsocketRails::BaseController, при отсутствии метода обращается к прокси объекту, который унаследован от ApplicationController. Но метод cookies в нем всё равно недоступен.
    Получить куки внутри потомков WebsocketRails::BaseController можно через метод request.cookie, и с помощью них получить текущего пользователя.
    Вот что получилось в итоге:
    class MessagesController < WebsocketRails::BaseController
      include ApplicationHelper
      before_action do
        Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self)
      end
      def cookies
        request.cookies
      end
      def create
        abort current_user.id.to_s
      end
    end
    Ответ написан
    Комментировать
  • Лучшие практики создания одностраничных сайтов?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Лучше всего не делать одностраничных сайтов
    Ответ написан
    Комментировать
  • Rails 4.2, ActiveRecord.all, как не возвращать последний елемент?

    viktorvsk
    @viktorvsk
    <%= @questions.each do | question | %>
    Заменить на
    <% @questions.each do | question | %>

    Равно означает, что "нужно вывести результат этой команды в шаблонизатор"
    Ответ написан
    1 комментарий
  • Как происходит механизм запросов на сервер в приложениях на RoR с EmberJS?

    MAKAPOH
    @MAKAPOH
    многостаночник
    Посмотрите код discourse, он как раз написан на rails + emberjs.
    Ответ написан
    Комментировать
  • Как вывести всех пользователей онлайн Ruby on Rails?

    kirillplatonov
    @kirillplatonov
    Ruby on Rails developer
    # app/controllers/application.rb
    after_action :user_activity
    
    private
    
    def user_activity
      current_user.try :touch
    end

    # app/models/user.rb
    ONLINE_PERIOD = 5.minutes
    
    scope :online, -> { where('updated_at > ?', ONLINE_PERIOD.ago) }
    
    def online?
      updated_at > ONLINE_PERIOD.ago
    end

    Использование:
    User.online # все пользователи онлайн
    Ответ написан
    2 комментария
  • Как реализовать хранение друзей в БД?

    serso
    @serso
    Добавить ещё одну колонку — тип связи. Будет — user, friend, relation_type, где relation_type, например, friend/not_approved_friend/declined_friend/follower. А в выборку добавиться просто ограничение на тип связи.
    Ответ написан
    Комментировать