Projekat

Općenito

Profil

Akcije

Podrška #15722

Zatvoren

rails plugins: tutorial acts_as_random

Dodano od Ernad Husremović prije više od 17 godina. Izmjenjeno prije više od 17 godina.

Status:
Zatvoreno
Prioritet:
Normalan
Odgovorna osoba:
Početak:
02.11.2008
Završetak:
% završeno:

100%

Procjena vremena:

Opis

http://www.railsonwave.com/railsonwave/2006/12/31/tutorial-a-simple-act_as-plugin-for-ruby-on-rails

The key-word for a plug-in of this kind is ‘mixing’; mixing means using Modules nested inside Classes. In details this is how an acts_as plugin works:
  1. inject into your Activerecord::Base class the module containing the function named ‘act_as_* ’
  2. put your ‘act_as_* ’ into your target model
  3. in the ‘act_as_* ’ function include the module that contains the instance functions and extend the module with the class functions

Fajlovi

countries.sqlite3.sql.txt (43,8 KB) countries.sqlite3.sql.txt countries sql prilagodjen sqlite3 Ernad Husremović, 02.11.2008 10:47
Akcije #1

Izmjenjeno od Ernad Husremović prije više od 17 godina

# ActAsRandom

#MyMod::Acts::Roled::AddActsAsMethod 

module MyMod

module Acts

module Roled

         # included is called from the ActiveRecord::Base
         def self.included(base)
             base.extend AddActsAsMethod
         end

         module AddActsAsMethod
                 def acts_as_random(options = {})
                       class_eval <<-END
                            include MyMod::Acts::Roled::InstanceMethods
                        END
                 end
         end

         module InstanceMethods

            def self.included(aClass)
                aClass.extend ClassMethods
            end

            module ClassMethods
               def random
                    find(:first, :order => "RANDOM()");
               end
            end

         end

end

end

end

injektovanje se vrši dodavanjem u init.rb plugin-a

require 'acts_as_random'
ActiveRecord::Base.send(:include, MyMod::Acts::Roled) 

Akcije #3

Izmjenjeno od Ernad Husremović prije više od 17 godina

hernad@nmraka-1:~/devel/rails/plugin_1$ script/console

Loading development environment (Rails 2.2.0)
>> Country.random.Name
=> "Canada" 
>> Country.random.Name
=> "Bangladesh" 
>> Country.Random.Name
NoMethodError: undefined method `Random' for #<Class:0xb6e626a0>
    from /home/hernad/.gem/ruby/1.8/gems/activerecord-2.2.0/lib/active_record/base.rb:1825:in `method_missing'
    from (irb):3
>> Country.random.Name
=> "Andorra" 

Akcije #4

Izmjenjeno od Ernad Husremović prije više od 17 godina

baza se punisa:

hernad@nmraka-1:~/devel/rails/plugin_1$ sqlite3 db/development.sqlite3 < countries.sqlite3.sql

Akcije #5

Izmjenjeno od Ernad Husremović prije više od 17 godina

  • Status promijenjeno iz Dodijeljeno u Zatvoreno
  • % završeno promijenjeno iz 0 u 100
Akcije

Također dostupno kao Atom PDF