Лаб 5_RubyOnRails (1075652), страница 4
Текст из файла (страница 4)
Default is UTC.# config.time_zone = 'Central Time (US & Canada)'# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]# config.i18n.default_locale = :de# Configure the default encoding used in templates for Ruby 1.9.config.encoding = "utf-8"# Configure sensitive parameters which will be filtered from the log file.config.filter_parameters += [:password]# Enable escaping HTML in JSON.config.active_support.escape_html_entities_in_json = true####Use SQL instead of Active Record's schema dumper when creating the database.This is necessary if your schema can't be completely dumped by the schema dumper,like if you have constraints or database-specific column typesconfig.active_record.schema_format = :sql# Enforce whitelist mode for mass assignment.# This will create an empty whitelist of attributes available for mass-assignment for all models# in your app.
As such, your models will need to explicitly whitelist or blacklist accessible# parameters by using an attr_accessible or attr_protected declaration.config.active_record.whitelist_attributes = true# Enable the asset pipelineconfig.assets.enabled = true# Version of your assets, change this if you want to expire all your assetsconfig.assets.version = '1.0'endendКак видим, большая часть параметров удовлетворяет значениями поумолчанию.
В будущем может понадобиться изменение языка по-умолчаниюconfig.i18n.default_locale.config/environments/development.rbconfig/environments/production.rb22config/environments/test.rbconfig/localesconfig/database.ymlconfig/initializers/secret_token.rbconfig/initializers/session_store.rb23Формы. Передача данных.Пример приложения с формойРазработаем приложение-калькулятор, задачей которого будет принятьвведенные значения и выдать результат.1. ввести rails new calc и войти в созданную директорию calc2. ввести rails generate controller Calc input view3. открыть файл app/views/input.html.erb<h1>Calc#input</h1><p>Find me in app/views/calc/input.html.erb</p><%= form_tag("/calc/view", :method => "get") do %><%= label_tag("Value 1:") %><%= text_field_tag(:v1) %> <br/><%= label_tag("Value 2") %><%= text_field_tag(:v2) %> <br/><%= label_tag("+") %><%= radio_button_tag(:op,<%= label_tag("-") %><%= radio_button_tag(:op,<%= label_tag("*") %><%= radio_button_tag(:op,<%= label_tag("/") %><%= radio_button_tag(:op,<br/>"+") %><br/>"-") %><br/>"*") %><br/>"/") %><br/><%= submit_tag("Calc result") %><% end %>4.
открыть файл app/views/view.html.erb<h1>Calc#view</h1><p>Find me in app/views/calc/view.html.erb</p><p id="result"><%= @result %></p><%= link_to "Repeat calculation", :calc_input %>5. Открыть файл app/controllers/calc_controller.rbclass CalcController < ApplicationControllerdef inputenddef viewv1 = params[:v1].to_iv2 = params[:v2].to_i@result = case params[:op]when "+" then v1 + v2;when "-" then v1 - v2;when "*" then v1 * v2;when "/" then v1 / v2;else "Unknown!"endendend24Проверяем результат.rails server –e developmentРисунок 8 Страница http://localhost:3000/calc/inputРисунок 9 Страница http://localhost:3000/calc/view после нажатия “Calc result”Пояснения к примеруВ приведенном примере для написания представленияapp/views/calc/input.html.erb использовано средство eRuby (Embedded Ruby).Это средство обеспечивает возможность написания шаблонов, в которыхделаются вставки кода на языке Ruby и, который будет выполнен в процессеподстановки шаблона.Шаблон представляет собой текст, имеющий вставки специального формата.Различают вставки для кода:<% ruby code %>% ruby codeИ вставки для выражений.<%= ruby expression %>25Код, расположенный внутри вставки, будет выполнен в процессе обработкишаблона.
Причём любые операции консольного вывода приведут к тому, чтовыводимые данные будут вставлены в результирующий текст. Напримервставка <% print "hello" %> будет заменена строкой hello.Выражение необходимо в том случае, когда требуется получить результат.Например вставку выше можно заменить на вставку <%= "hello" %>. Вставкадля выражений применяется для того, чтобы исключить необходимостьиспользования методов print, puts и пр.Ruby-код не прерывается между вставками.
Это позволяет организовать егоследующим образом (фрагмент примера выше):<%= form_tag("/calc/view", :method => "get") do %><%= label_tag("Value 1:") %><%= text_field_tag(:v1) %> <br/><br/><%= submit_tag("Calc result") %><% end %>В данном случае вызывается метод form_tag, в блоке которого вызываютсяметоды label_tag, text_field_tag, submit_tag. Между вставками, содержащимиRuby-код может содержаться любой текст, который будет вставлен в итоговыйтекст.
Однако текст, который формируют методы form_tag, label_tag,text_field_tag, submit_tag, будет размещен точно в позиции содержащих ихвставок. Отметим, что эти методы реализует Ruby on Rails. Более подробно см.http://guides.rubyonrails.org/form_helpers.html иhttp://guides.rubyonrails.org/layouts_and_rendering.htmlhttp://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.htmlОграничимся описанием использованных выше методов.Метод для прописывания тэга формы. Обратите внимание на то, что методподдерживает блоки.
Последний параметр &block является альтернативнымдля Ruby способом передачи блока.form_tag(url_for_options = {}, options = {}, &block)Одна из возможных опций (options)::method — устанавливает метод отправки формы "get" или "post".Примеры:form_tag('/posts')# => <form action="/posts" method="post">form_tag('/posts/1', method: :put)# => <form action="/posts/1" method="post"> ...
<input name="_method"type="hidden" value="put" /> ...26form_tag('/upload', multipart: true)# => <form action="/upload" method="post" enctype="multipart/form-data"><%= form_tag('/posts') do -%><div><%= submit_tag 'Save' %></div><% end -%># => <form action="/posts" method="post"><div><input type="submit" name="commit"value="Save" /></div></form>Метод формирования HTML-метки и прописывание имени в качествеатрибута:label_tag(name = nil, content_or_options = nil, options = nil, &block)Примеры:label_tag 'name'# => <label for="name">Name</label>label_tag 'name', 'Your name'# => <label for="name">Your name</label>label_tag 'name', nil, class: 'small_label'# => <label for="name" class="small_label">Name</label>Метод формирования текстового поля.text_field_tag(name, value = nil, options = {})Допустимые значения Options: :disabled — Если установлено в true, то пользователь не сможетиспользовать это поле. :size — Видимый размер поля в символах. :maxlength — Максимальное количество символов, которое может ввестипользователь. :placeholder — Текст, которые печатается по умолчанию в поле до техпор, пока пользователь не начнёт ввод.Примеры:text_field_tag 'name'# => <input id="name" name="name" type="text" />text_field_tag 'query', 'Enter your search query here'# => <input id="query" name="query" type="text" value="Enter your search queryhere" />text_field_tag 'search', nil, placeholder: 'Enter search term...'# => <input id="search" name="search" placeholder="Enter search term..."type="text" />text_field_tag 'request', nil, class: 'special_input'# => <input class="special_input" id="request" name="request" type="text" />text_field_tag 'address', '', size: 75# => <input id="address" name="address" size="75" type="text" value="" />text_field_tag 'zip', nil, maxlength: 527# => <input id="zip" maxlength="5" name="zip" type="text" />text_field_tag 'payment_amount', '$0.00', disabled: true# => <input disabled="disabled" id="payment_amount" name="payment_amount"type="text" value="$0.00" />text_field_tag 'ip', '0.0.0.0', maxlength: 15, size: 20, class: "ip-input"# => <input class="ip-input" id="ip" maxlength="15" name="ip" size="20"type="text" value="0.0.0.0" />Метод для создания селектора в форме круга.
Для предоставлениявозможности выбора одного значения из группы следует сформироватьнесколько селекторов с одним и тем же именем.radio_button_tag(name, value, checked = false, options = {})Допустимые значения «Options»: :disabled — Если установлено в true, то пользователь не сможетиспользовать это поле.Примеры:radio_button_tag 'gender', 'male'# => <input id="gender_male" name="gender" type="radio" value="male" />radio_button_tag 'receive_updates', 'no', true# => <input checked="checked" id="receive_updates_no" name="receive_updates"type="radio" value="no" />radio_button_tag 'time_slot', "3:00 p.m.", false, disabled: true# => <input disabled="disabled" id="time_slot_300_pm" name="time_slot"type="radio" value="3:00 p.m." />radio_button_tag 'color', "green", true, class: "color_input"# => <input checked="checked" class="color_input" id="color_green" name="color"type="radio" value="green" />Метод для формирования кнопки.submit_tag(value = "Save changes", options = {})Допустимые значения «Options»: :data – используется для добавления пользовательских данных. :disabled - Если установлено в true, то пользователь не сможетиспользовать это поле. Любые другие ключи будут интерпретироваться как стандартные HTMLопции и также будут добавлены в итоговый вывод.Примеры:submit_tag# => <input name="commit" type="submit" value="Save changes" />submit_tag "Edit this article"# => <input name="commit" type="submit" value="Edit this article" />submit_tag "Complete sale", data: { disable_with: "Please wait..." }# => <input name="commit" data-disable-with="Please wait..." type="submit"value="Complete sale" />28submit_tag nil, class: "form_submit"# => <input class="form_submit" name="commit" type="submit" />submit_tag "Edit", class: "edit_button"# => <input class="edit_button" name="commit" type="submit" value="Edit" />29Функциональные тесты контроллеровФункциональные тесты предназначены для проверки функционированияконкретных действий контроллера и позволяют проверить: является ли успешным или не успешным обращение к заданномудействию контроллера;было ли выполнено перенаправление пользователя на заданную страницув процессе выполнения действия; имеется ли необходимый объект для использования в представлении; было ли сформировано необходимое сообщение для пользователя.Для разработанного приложения-калькулятора целесообразно проверить: действие Calc#input возвращает success; действие Calc#view при наличии всех необходимых параметров создаёт@result; действие Calc#view при отсутствии необходимых параметров не создаёт@result.Файл для функционального теста уже сформирован при генерацииконтроллера.