Skip to content

Latest commit

 

History

History
131 lines (111 loc) · 7.73 KB

lesson-22.md

File metadata and controls

131 lines (111 loc) · 7.73 KB

Урок 22

Решение, чтобы не перезапускать Sinatra

Надо установить гем sinatra-reloader:

gem install sinatra-reloader

или установить sinatra-contrib:

gem install sinatra-contrib

или так:

sudo apt install ruby-sinatra-contrib

и, добавляем в свои app.rb строчку:

require 'sinatra/reloader'

Про yield в views/layout.erb

app.rb:

require 'sinatra'

get '/' do
  erb "Hello all Ruby-programmers!"
end

views/layout.erb:

<h1>Some text</h1>
<%= yield %>

Информация из app.rb будет помещена в yield в views/layout.erb

В файле views/layout.erb можно сделать основной каркас страницы, разместить yield и уже из других erb подгружать информацию.

app.rb

get '/foo' do
  erb :foo
end

views/layout.erb

<p>This block for all site</p>
<p>Block navigation</p>
<%= yield %>

views/foo.erb

<h1>Foo Header</h1>
<p>Text for Foo.</p>

Напомним, как работает yield:

def show_me_text
  puts "<body>"
  yield
  puts "</body>"
end

show_me_text { puts "Foo!" }

# OR:

show_me_text do
  puts "Foo!"
end

# puts "Foo!" вставится в место, где указан yield

Задание:

В Babershop добавить возможность выбора парикмахера (через select).

Решение:

В views/index.erb добавить часть кода:

  <label for="baber">Выбор парикмахера</label>
  <select name="baber">
    <option value="none" selected>Выберите парикмахера...</option>
    <option value="Петрович">Петрович</option>
    <option value="Макарыч">Макарыч</option>
    <option value="Федорыч">Федорыч</option>
  </select>

А, в babershop-2.rb добавить и исправить код:

post '/' do
  # user_name, phone, date_time
  @user_name = params[:user_name]
  @phone = params[:phone]
  @date_time = params[:date_time]
  @baber = params[:baber]

  @title = "Thank you!"
  @message = "Уважаемый #{@user_name}, мы ждём вас #{@date_time} у выбранного парикмахера #{@baber}."

  # запишем в файл то, что ввёл клиент
  f = File.open 'users.txt', 'a'
  f.write "User: #{@user_name}, phone: #{@phone}, date and time: #{@date_time}. Baber: #{@baber}.\n"
  f.close

  erb :message
end

Здесь мы добавили код:

@baber = params[:baber]

плюс добавили в @message и в код записи в файл f.write


Следующий урок: https://github.com/krdprog/rubyschool-notes/blob/master/one-by-one/lesson-23.md

Навигация по конспектам (по-одному уроку в файле):

N N N N N N N N N N
01 02 03 04 05 06 07 08 09 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50