edge
Daugiau informacijos rubyonrails.org: Daugiau apie Ruby on Rails

Rails aplikacijų šablonai

Aplikacijų šablonai yra paprasti Ruby failai, kuriuose yra DSL (Domain Specific Language) pridėtiems gemams, inicializavimo failams ir kt. jūsų naujai sukurtai arba jau egzistuojančiai Rails aplikacijai.

Po šio vadovo perskaitymo jūs žinosite:

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.