Page 131 of 165

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.

Krótko i szybko o selectorach JS w Prototype

Pracując dzisiaj nad Susanoo dla Senpuu, wyszło na jaw, że korzystanie z takiego selectora:

$$('tr[class = "parent_'+id+'"]')

kiedy klasa nie jest jedna ale jest ich kilka, jak np. w takim przypadku:

class="parent_252342 body status_2"

nic nie da.

Wyniki nie zostaną poprawnie wybrane ponieważ nie pasują "idealnie". Aby w takim wypadku wybrać elementy z klasą parent_ID ale także z innymi, musimy skorzystać z takiego selectora:

$$('tr[class ~= "parent_'+id+'"]')

Poniżej prezentuję jeszcze kilka innych przykładów selectorów:

$$('.class-a,.class-b');
$$('div[class~="class-a"]')
$$('td:not(.class-b)');
$(element).select('.class-a');

w zasadzie to co tutaj widać, to w dużej mierze wykorzystanie selectorów dostępnych w CSS3.

Copyright © 2024 Closer to Code

Theme by Anders NorenUp ↑