- PVSM.RU - https://www.pvsm.ru -
Я только недавно познакомился с миром Rails, и как у каждого первоклассника возникает дюжина вопросов, большинство с которых у бывалого девелопера могут вызвать улыбку на лице. Написав первых три проекта у меня возник банальный вопрос хранения дополнительных конфигурационных данных в файле. То есть, при старте мы читаем данные с пользовательского конфигурационного файла, в ходе работы app можем при необходимости что-то изменить и все аккуратно сохранить в тот же файл.
В итоге изучения данного вопроса я искал gem, функционал которого выполняет данную миссию, но не нашел. Скорее всего я чего то делаю не так, поскольку в документации gem'а config [1] я не вижу как сохранить данные в файл (думаю проблема в моем недопонимании)
И так, моя реализация:
Первым делом редактируем config/application.rb
require 'yaml'
if File.exist? Rails.root.join('config', 'settings.yml')
config.settings = YAML::load_file(Rails.root.join('config', 'settings.yml'))
else
config.settings = {}
end
Контроллер settings_controller.rb
class Admin::SettingsController < AdminController
def index
@settings=Rails.application.config.settings
end
def create
flash[:success] = "Даные успешно сохранены"
File.open("settings.yml", "w") do |file|
file.write settings_params.to_yaml
end
Rails.application.config.settings=settings_params
redirect_to admin_settings_index_path
end
private
def settings_params
params.permit(:name, :email)
end
end
Ну и собственно вьюха
<% provide(:title, 'Конфигурация') %>
<%= bootstrap_form_tag @settings do |f| %>
<%= f.text_field :name, label: "Название", value: f.options[:name] %>
<%= f.text_field :email, label: "e-mail", value: f.options[:email] %>
<%= f.submit " Сохранить ", class: "btn btn-success" %>
<%= link_to " Назад ", admin_root_path, class: "btn btn-danger" %>
<% end %>
Автор: savio
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ruby-on-rails/114396
Ссылки в тексте:
[1] config: https://github.com/railsconfig/config
[2] Источник: https://habrahabr.ru/post/278801/
Нажмите здесь для печати.