Tag: Rails

Rails3 i ustawianie modułu głównego aplikacji (scope)

Przepisując część kliencką CMSa na nowe Railsy, natknąłem się na pewien problem. Jak zamapować moduł w taki sposób aby był on widoczny bez prefiksu?

Mógłbym przerzucić całość kontrolerów z modułu Site(domyślny moduł gdzie trzymam część "kliencką" CMSa) do roota, ale nie jest to zbyt dobre rozwiązanie (zaczyna się robić bałagan).

Okazało się, że nowy Routing jest w tym wypadku nader wygodny. Wystarczy skorzystać z polecenia scope i przekierować żądania w obrębie roota, do naszego modułu:

  scope :module => "site" do
    resources :jakiszasob
    resources: jakiszasob2
  end

A tak w ogóle, to polecam przeglądnięcie tego adresu: http://edgeguides.rubyonrails.org/routing.html. Znajduje się tam kompletny przewodnik do nowego routingu.

ActiveRecord – pobieranie losowego elementu (rekordu) z modelu

Kolejna krótka notka.

Tym razem nt tego jak pobierać losowy element (rekord) z modelu.

Najprościej jest skorzystać z kodu który krąży po necie od dawien dawna:

      def self.random
        find(:first, :order => "RAND()")
      end

Ma on jednak jedną wadę. Cachowanie Railsowego go psuje. Tzn że jeśli Railsy cachują zapytania i wykonamy dwa razy tę metodę, w obrębie jednego żądania - to wylosuje nam ten sam element. Rozwiązaniem tego jest wykorzystanie parametry created_at w taki oto sposób:

      def self.random
        find(:first, :order => "RAND()", :conditions => "created_at < '#{Time.now.to_s(:db)}'")
      end

co wymusi każdorazowo wykonanie nowego zapytania, ponieważ znacznik czasu będzie inny.

Copyright © 2025 Closer to Code

Theme by Anders NorenUp ↑