Пользовательский файл конфигурации в Rails

от автора

image

Я только недавно познакомился с миром Rails, и как у каждого первоклассника возникает дюжина вопросов, большинство с которых у бывалого девелопера могут вызвать улыбку на лице. Написав первых три проекта у меня возник банальный вопрос хранения дополнительных конфигурационных данных в файле. То есть, при старте мы читаем данные с пользовательского конфигурационного файла, в ходе работы app можем при необходимости что-то изменить и все аккуратно сохранить в тот же файл.

В итоге изучения данного вопроса я искал gem, функционал которого выполняет данную миссию, но не нашел. Скорее всего я чего то делаю не так, поскольку в документации gem’а config я не вижу как сохранить данные в файл (думаю проблема в моем недопонимании)

И так, моя реализация:

  • В качестве формата хранения я выбрал YAML.
  • Пользовательский файл конфигурации — config/settings.yml.
  • Для примера будем хранить хеш з ключами name и email

Первым делом редактируем 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 %>  

ссылка на оригинал статьи https://habrahabr.ru/post/278801/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *