1 Naudingumas
Norėdami pritaikyti šabloną, turite nurodyti Rails generatoriui šablono vietą, kurį norite pritaikyti, naudodami -m
parinktį. Tai gali būti failo arba URL kelias.
$ rails new blog -m ~/template.rb
$ rails new blog -m http://example.com/template.rb
Galite naudoti app:template
rails komandą pritaikyti šablonus jau egzistuojančiai Rails aplikacijai. Šablono vieta turi būti perduodama per LOCATION aplinkos kintamąjį. Vėlgi, tai gali būti failo arba URL kelias.
$ bin/rails app:template LOCATION=~/template.rb
$ bin/rails app:template LOCATION=http://example.com/template.rb
2 Šablono API
Rails šablonų API yra lengvai suprantama. Čia pateikiamas tipinio Rails šablono pavyzdys:
# template.rb
generate(:scaffold, "person name:string")
route "root to: 'people#index'"
rails_command("db:migrate")
after_bundle do
git :init
git add: "."
git commit: %Q{ -m 'Initial commit' }
end
Šios sekcijos apibūdina pagrindinius API teikiamus metodus:
2.1 gem(*args)
Prideda gem
įrašą su nurodytu gemu į sugeneruotos aplikacijos Gemfile
.
Pavyzdžiui, jei jūsų aplikacija priklauso nuo bj
ir nokogiri
gemų:
gem "bj"
gem "nokogiri"
Reikia pažymėti, kad šis metodas tik prideda gemą į Gemfile
; jis neįdiegia gemo.
2.2 gem_group(*names, &block)
Apvija gemų įrašus grupėje.
Pavyzdžiui, jei norite įkelti rspec-rails
tik development
ir test
grupėse:
gem_group :development, :test do
gem "rspec-rails"
end
2.3 add_source(source, options={}, &block)
Prideda nurodytą šaltinį į sugeneruotos aplikacijos Gemfile
.
Pavyzdžiui, jei reikia naudoti gemo šaltinį iš "http://gems.github.com"
:
add_source "http://gems.github.com"
Jeigu yra perduodamas blokas, gemo įrašai bloke yra apvyniojami į šaltinio grupę.
add_source "http://gems.github.com/" do
gem "rspec-rails"
end
2.4 environment/application(data=nil, options={}, &block)
Prideda eilutę į Application
klasę config/application.rb
faile.
Jeigu yra nurodytas options[:env]
, eilutė yra pridėta į atitinkamą failą config/environments
.
environment 'config.action_mailer.default_url_options = {host: "http://yourwebsite.example.com"}', env: 'production'
Vietoje data
argumento gali būti naudojamas blokas.
2.5 vendor/lib/file/initializer(filename, data = nil, &block)
Prideda inicializavimo failą į sugeneruotos aplikacijos config/initializers
direktoriją.
Tarkime, jums patinka naudoti Object#not_nil?
ir Object#not_blank?
:
initializer 'bloatlol.rb', <<-CODE
class Object
def not_nil?
!nil?
end
def not_blank?
!blank?
end
end
CODE
Panašiai, lib()
sukuria failą lib/
direktorijoje, o vendor()
sukuria failą vendor/
direktorijoje.
Yra netgi file()
, kuris priima kelius nuo Rails.root
ir sukuria visus reikalingus direktorijas/failus:
file 'app/components/foo.rb', <<-CODE
class Foo
end
CODE
Tai sukurs app/components
direktoriją ir įdės foo.rb
į ją.
2.6 rakefile(filename, data = nil, &block)
Sukuria naują rake failą lib/tasks
direktorijoje su nurodytomis užduotimis:
rakefile("bootstrap.rake") do
<<-TASK
namespace :boot do
task :strap do
puts "i like boots!"
end
end
TASK
end
Pirmiau pateiktas kodas sukurs lib/tasks/bootstrap.rake
su boot:strap
rake užduotimi.
2.7 generate(what, *args)
Paleidžia nurodytą rails generatorių su pateiktais argumentais.
generate(:scaffold, "person", "name:string", "address:text", "age:number")
2.8 run(command)
Vykdo bet kokį komandą. Kaip ir atgalinės kabutės. Tarkime, norite pašalinti README.rdoc
failą:
run "rm README.rdoc"
2.9 rails_command(command, options = {})
Paleidžia nurodytą komandą Rails aplikacijoje. Tarkime, norite atlikti duomenų bazės migraciją:
rails_command "db:migrate"
Taip pat galite paleisti komandas su kitu Rails aplinku:
rails_command "db:migrate", env: 'production'
Taip pat galite paleisti komandas kaip super-vartotojas:
rails_command "log:clear", sudo: true
Taip pat galite paleisti komandas, kurios turėtų nutraukti aplikacijos generavimą, jei jos nepavyksta:
rails_command "db:migrate", abort_on_failure: true
2.10 route(routing_code)
Prideda maršrutizavimo įrašą į config/routes.rb
failą. Ankstesniuose žingsniuose mes sugeneravome person šabloną ir pašalinome README.rdoc
. Dabar, norint padaryti PeopleController#index
numatytąja aplikacijos puslapiu:
route "root to: 'person#index'"
2.11 inside(dir)
Leidžia paleisti komandą iš nurodytos direktorijos. Pavyzdžiui, jei turite kopiją edge rails, kurią norite susieti su savo naujomis aplikacijomis, galite tai padaryti:
ruby
viduje('pardavėjas') do
vykdyti "ln -s ~/commit-rails/rails rails"
end
2.12 klausti(klausimas)
klausti()
suteikia galimybę gauti grįžtamąjį ryšį iš naudotojo ir jį naudoti savo šablonuose. Tarkime, norite, kad naudotojas pavadintų naują švytinčią biblioteką, kurią pridedate:
bibliotekos_pavadinimas = klausti("Kaip norite pavadinti švytinčią biblioteką?")
bibliotekos_pavadinimas << ".rb" jei bibliotekos_pavadinimas.index(".rb")
biblioteka bibliotekos_pavadinimas, <<-KODAS
class Švytinčia
end
KODAS
2.13 taip?(klausimas) arba ne?(klausimas)
Šios metodai leidžia jums užduoti klausimus iš šablonų ir nuspręsti srautą pagal naudotojo atsakymą. Tarkime, norite paprašyti naudotojo paleisti migracijas:
rails_komanda("db:migrate") jei taip?("Paleisti duomenų bazės migracijas?")
# ne?(klausimas) veikia priešingai.
2.14 git(:komanda)
Rails šablonai leidžia jums paleisti bet kokią git komandą:
git :init
git add: "."
git commit: "-a -m 'Pradinis įsipareigojimas'"
2.15 po_bundlo(&blokas)
Registruoja atgalinį iškvietimą, kuris bus vykdomas po to, kai bus sujungti grotuvai ir binstubai yra sugeneruojami. Tai naudinga, jei norite pridėti sugeneruotus failus į versijų kontrolę:
po_bundlo do
git :init
git add: '.'
git commit: "-a -m 'Pradinis įsipareigojimas'"
end
Atgaliniai iškvietimai vykdomi net jei buvo perduotas --skip-bundle
parametras.
3 Išplėstinis naudojimas
Programos šablonas yra vertinamas Rails::Generators::AppGenerator
egzemplioriaus kontekste. Jis naudoja
apply
veiksmą, kurį teikia Thor.
Tai reiškia, kad galite išplėsti ir pakeisti egzempliorių pagal savo poreikius.
Pavyzdžiui, perrašydami source_paths
metodą, kad jis apimtų
jūsų šablono vietą. Dabar metodai, pvz., copy_file
, priims
kelius iki jūsų šablono vietos.
def source_paths
[__dir__]
end
Atsiliepimai
Jūs esate skatinami padėti pagerinti šio vadovo kokybę.
Prašome prisidėti, jei pastebite rašybos klaidų ar faktinių klaidų. Norėdami pradėti, galite perskaityti mūsų dokumentacijos prisidėjimo skyrių.
Taip pat gali būti nepilnos informacijos arba informacijos, kuri nėra atnaujinta. Prašome pridėti bet kokią trūkstamą dokumentaciją pagrindiniam. Patikrinkite Edge vadovus pirmiausia, ar problemas jau išspręsta arba ne pagrindinėje šakoje. Patikrinkite Ruby on Rails vadovų gaires dėl stiliaus ir konvencijų.
Jei dėl kokios nors priežasties pastebite kažką, ką reikia ištaisyti, bet negalite patys tai pataisyti, prašome pranešti apie problemą.
Ir galiausiai, bet ne mažiau svarbu, bet koks diskusijos dėl Ruby on Rails dokumentacijos yra labai laukiamos oficialiame Ruby on Rails forume.