ОБНОВЛЕНО СНОВА Я модифицировал приложение, чтобы обрабатывать форму для каждой записи настройки. Форма отправляет в/Настройки с помощью метода: put и зацикливается в блоке транзакций.Ruby on Rails 4 - Модель для настройки Rails.configuration
Вот мой код:
# settings_controller.rb
class SettingsController < ApplicationController
def index
@settings = Setting.all
end
def update
Setting.transaction do
params[:settings].each do |k, v|
@setting = Setting.find(k)
@setting.update(params.require(:settings)[k].permit(:value))
end
end
end
# settings/index.html.erb
<%= form_tag "/settings", :method => "put" do %>
<table>
<thead>
<tr>
<th>Setting</th>
<th>Value</th>
</tr>
<tbody>
<% @settings.each do |setting| %>
<tr>
<%= fields_for "settings[]", setting do |sf| %>
<td><%= sf.label :name, t(setting.name) %></td>
<td><%= sf.text_field :value %></td>
<% end %>
</tr>
<% end %>
</tbody>
</table>
<%= submit_tag("Save Changes") %>
<%= link_to 'back', articles_path %>
<% end %>
#models/article.rb
class Article < ActiveRecord::Base
has_many :comments, dependent: :destroy
validates :title, presence: true,
length: { minimum: (Setting.find_by_name("validation_article_title_length_min").value.to_i) }
end
Я не думаю, что это хороший способ сделать это, и вот почему: я должен был прыгать через обручи, чтобы получить представление, чтобы сделать каждую установку, так как он является частью нескольких записей. Я использую перевод i18n для перевода имени базы данных «validation_article_title_length_min» на «Минимальная длина заголовка элемента» ... Я не знаю, нормально это или нет.
Я не могу проверить каждую запись в модели таким образом, чтобы она соответствовала всем параметрам.
И наконец (и это большой) проверка товара не работает. Он будет принимать значение из базы данных и работать как ожидалось, но после изменения значения через форму (и я проверил, что значение действительно изменилось), валидация придерживается старого номера. Через некоторое время он начинает использовать новый номер.
Должен быть более простой способ сделать все это? Возможно, мне нужно изменить миграцию, чтобы каждый параметр был его собственным столбцом? Выполнение этого исправляет мою форму и цикл транзакций, которые я должен выполнять в своем контроллере. Но в конце дня проверка в статье не изменяется с обновлением базы данных, и я не знаю почему.
Еще раз спасибо за руководство по этому вопросу.
ОБНОВЛЕНО Благодаря комментариев @Frederick Cheung, я считаю, что это может быть лучше пойти с записью базы данных для настройки. Это создает две проблемы: Я хочу, чтобы страница индекса настроек отображала все настройки и разрешала редактировать и отправлять сообщения с этой страницы.
Если бы у меня было 5 настроек проверки, щелчок сообщения должен обеспечить, чтобы все 5 были действительны перед отправкой одного из них в базу данных.
Также как вы рекомендуете хранить это в базе данных? Я играл с миграцией, и я могу либо сделать каждый столбец другой настройкой приложения. Или я могу сделать каждую установку строки.
Еще раз спасибо за помощь; Я надеюсь, что это все клики в ближайшее время.
Предыдущее сообщение:
У меня есть совершенно новые рельсы проект с «Getting Started» учебник с сайта рельсы. Все работает так, как ожидалось.
Моя задача: В настоящее время пользователи могут добавлять статью. Заголовок статьи должен быть> 5 символов. Я хотел сделать этот номер переменной конфигурации среды. Затем я хотел бы настроить эту переменную с веб-страницы.
Что я сделал до сих пор Я создал ресурс настроек. Я попытался сохранить настройки в базу данных как отдельные строки, но это означало, что каждый параметр можно редактировать только по одному.После того, как я обнаружил, прибегая к помощи, что переменные конфигурации могут быть созданы в config/article_valdiation.yml
default: &default
title_length_min: 5
development:
<<: *default
bar: dev
test:
<<: *default
bar: test
Тогда в config/environment.rb
я сделал следующее:
Rails.configuration.article = ActiveSupport::OrderedOptions.new()
Rails.configuration.article.validation = Rails.application.config_for(:article_validation).deep_symbolize_keys
Я пытаюсь создать структуру, подобную Rails.configuration.element.configcatagory [config_element]
Вот настройки маршрута и вида.
# routes.rb
resources :settings do
collection do
put :update
patch :update
end
end
# settings/index.html.erb
<% render plain: params[:setting].inspect %>
<h1>Application Settings</h1>
<%= form_tag("/settings", :method => "put") do %>
<table>
<thead>
<tr>
<th>Setting</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>Minimum Article Title Length</td>
<td><%= text_field_tag('article[:title_length_min]', Rails.configuration.article.validation[:title_length_min]) %></td>
</tr>
</tbody>
</table>
<%= submit_tag("Save Changes") %>
<%= link_to 'back', articles_path %>
<% end %>
Проблему Может быть, я неправильно настройка вещи, но ...:
- Я не могу определить, как настроить вид так PARAMS отправляется указать как «статью» , "валидация" и "title_length_min".
- Я не знаю, как заставить элемент управления правильно проанализировать параметры. Он получает параметры, но я не знаю, что с ними делать, поскольку я не могу выполнять обычные настройки.find и Setting.update (params.require (: something,: somethingelse)
- Я чувствую, что должно быть модель для настройки этих пользовательских конфигураций, но я в недоумении о том, с чего начать, чтобы сделать эту работу
Я не думаю, что это сработает (например, такие изменения не будут сохраняться). Я бы пересмотрел подход к базе данных –
У вас есть точка зрения, я как бы забыл проблему персистентности ... Если я использую подход к базе данных, я могу отправлять только одну настройку за один раз. Подумайте о любой странице конфигурации любого приложения. На одной странице обычно несколько вариантов. Когда вы нажимаете «Сохранить», все эти параметры сохраняются. Я обновлю свой вопрос, чтобы отразить это новое направление мышления. Спасибо. – Bil1
Любое редактирование нескольких настроек одновременно или сохранение нескольких настроек в одном объекте должно быть возможно. –