Ответы пользователя по тегу Ruby on Rails
  • Хочу свой return_my в Ruby. Как это сделать?

    beerdy
    @beerdy Автор вопроса
    https://vk.com/beerdy
    Артём Петренков: Эксепшены на то и эксепшены, чтобы вверх всплывать. И да, блоки begin ... rescue ... end можно вкладывать друг в друга.

    Спасибо Артем!
    Ответ написан
    Комментировать
  • Зачем Ruby нужен fiber?

    beerdy
    @beerdy Автор вопроса
    https://vk.com/beerdy
    Вобщем так, сам разобрался зачем Фибры нужны - по РУССКИ говоря, скорее всего как внешние итераторы, к примеру так:
    class PhotoClass
      def initialize(media)
        @fibs  = []
        @media = media
        @fib   = fib(media)
      end
    
      def read
        @fib.resume @media
      end
    
    private
      def fib(media)
        Fiber.new do |media|
          loop do
            stop = true
            (0..media.length).each do |index|
              result = fiber_inner(index).resume media[index].stock_photos if media[index]
    
              unless result.nil?
                stop = false
                Fiber.yield ({ :index => index, :title => { :group => media[index].title, :image => media[index].stock_photos[result].title }, :url => media[index].stock_photos[result].image.url })
              end
            end
            Fiber.yield nil if stop
          end
        end
      end
    
    protected
      def fiber_inner(num)
        return @fibs[num] if @fibs[num]
    
        @fibs[num] = Fiber.new do |content|
          content.each_with_index do |(image),index|
            Fiber.yield index
          end
          loop do Fiber.yield nil end
        end
      end
    end

    Используем во вьюхе:
    <% loop do %>
    
                      <% image = @photo.read %>
                      <% break if image.nil? %>
    
                      <div class="portfolio-box cm<%= image[:index] %>-design">
                        <div class="portfolio-box-container work">
                          <img src="<%= image[:url] %>" alt="" data-at2x="<%= image[:url] %>">
                          <div class="portfolio-box-text">
                            <h3><%= image[:title][:group] %></h3>
                            <p>Краткое описание картинки изобра.</p>
                          </div>
                            <div class="work-bottom">
                              <a class="big-link-2 view-work" href="<%= image[:url]%>"><span class="icon_search"></span></a>
                              <a class="big-link-2" href="/complectation/index"><span class="icon_link"></span></a>
                            </div>
    
                        </div>
                      </div>
                      <% end %>
    Ответ написан
  • Как добавить метод (расширить класс) для объекта нативного класса в Ruby?

    beerdy
    @beerdy Автор вопроса
    https://vk.com/beerdy
    Разобрался. Собсна все просто:
    class String
      def is_wtf_string?
        self == 'wtf'
      end
    end
    a = 'wtf'
    p a.is_wtf_string? #=> true


    #update Александр Швайкин навел на мысль, что так будет лучше:

    # ./ExtStandartClass.rb
    module ExtString 
      def is_wtf_string?
        self == 'wtf'
      end
    end
    
    module ExtFixnum
      def squared
        self*self
      end
    end
    
    # добавим расширенные методы
    class String; include ExtString; end
    class Fixnum; include ExtFixnum; end
    
    
    # ./SomeCode.rb
    # include 'ExtStandartClass.rb'
    # ...
    a = 'wtf'
    p a.is_wtf_string? #=> true
    # ...
    # где нибудь в коде если приспичит узнать что откуда
    p a.method(:to_s) 
    p a.method(:is_wtf_string?)
    # аналогично
    b = 5
    p b.squared
    p b.method(:to_s) 
    p b.method(:squared)
    Ответ написан
    Комментировать
  • Что значит строка кода?

    beerdy
    @beerdy Автор вопроса
    https://vk.com/beerdy
    Я так понял что вот эта валидация, в случае ошибки вызывает исключение в виде строки:
    validates :price, numericality: {greater_than_or_equal_to: 0.01}

    must be greater than or equal to 0.01

    А этот метод assert_equal я так понял просто сравнивает две строки? Получается он просто используется для эстетического оформлеиния в тестах (или как там это называется)?
    Ответ написан
  • Не могу понять логику. Как сделать правильно?

    beerdy
    @beerdy Автор вопроса
    https://vk.com/beerdy
    Все, всем спасибо. Вот ответ:
    <li class="<%= if product.rate == count then 'star selected' else 'star' end %>" >&star;</li>
    Ответ написан
    Комментировать
  • Зачем в ruby - public, protected и private методы?

    beerdy
    @beerdy Автор вопроса
    https://vk.com/beerdy
    Вот опять читаю ветку которую указал выше и нашел ответ того же автора Виктор Ablebeam звучит след. образом:
    Я бы сказал, что в руби по определению не может быть нормальной области видимости, т.к. все определяется в рантайме. В итоге, все эти нотации имеют больше документальный характер. И, по крайней мере когда-то, использовать в контроллерах и хелперах protected - считалось как минимум хорошим тоном
    Ответ написан
  • Mongodb Object.bsonsize()?

    beerdy
    @beerdy Автор вопроса
    https://vk.com/beerdy
    Неактуально т.к. для инкремента нужно основание а основание как раз и является чтение и вычисление длины документа.
    Ответ написан
    Комментировать