Как сделать этот код лучше? (Синатра + datamapper) - PullRequest
0 голосов
/ 08 декабря 2011

Я новичок в этом, и я использую datamapper и sinatra для создания базового приложения. У меня есть страница настроек с несколькими текстовыми вводами для нескольких различных настроек.

При просмотре этой страницы следует извлечь информацию из базы данных и заполнить поля ввода, если они там есть.

Для моего класса настроек у меня есть: имя и: значение

На данный момент у меня работает код, который позволяет создавать настройки, если имя еще не существует, и обновляет их в противном случае.

Setting.first_or_create(:name => "seed").update(:name => "seed", :value => params[:seed])

3 задачи:

  1. если ввод пустой (очевидно, после первого раза), он перезаписывает его с ""

  2. Как мне сократить этот код? Должен ли я определить метод в реальной программе ruby, чтобы не было слишком много избыточного кода? У меня есть 5 настроек, так что я чувствую, что иметь эту строку кода 5 раз с несколькими разными вещами - это плохо. Сложность в том, что я буду вынужден назвать = "" все мои входные данные точным хешем, который я использую. Я не уверен, что это плохая практика или нет, или я должен просто сделать все это явно 5 раз

  3. Для того, чтобы «получить» данные для отображения, у меня есть это:

    @seed  = Setting.get(:name => "seed")
    

    Это, очевидно, не работает ... мне нужно получить params [: value] WHERE: name => "seed" и использовать <% = @seed (???)%> для его распечатки , я не уверен, как это сделать

1 Ответ

1 голос
/ 08 декабря 2011
@seed = Setting.first_or_create(:name => "seed") # fetch and store
# update only if there was one
@seed.update(:name => "seed", :value => params[:seed]) if params[:seed].present?

<!-- show the value in the page -->
<%= @seed.value %>
...