Akcije
Podrška #15722
Zatvorenrails plugins: tutorial acts_as_random
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:- inject into your Activerecord::Base class the module containing the function named ‘act_as_* ’
- put your ‘act_as_* ’ into your target model
- in the ‘act_as_* ’ function include the module that contains the instance functions and extend the module with the class functions
Fajlovi
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)
Izmjenjeno od Ernad Husremović prije više od 17 godina
- Fajl countries.sqlite3.sql.txt countries.sqlite3.sql.txt dodano
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"
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
Izmjenjeno od Ernad Husremović prije više od 17 godina
- Status promijenjeno iz Dodijeljeno u Zatvoreno
- % završeno promijenjeno iz 0 u 100
Akcije