Rails 3.0 - где поставить эту логику? - PullRequest
0 голосов
/ 25 октября 2011

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

Я просто не уверен, что лучшие Rails,MVC-способ обработки этих вариантов использования:

  1. Отображение отформатированной строки (с некоторой логикой) для пользователя каждый раз, когда я показываю Task.due_date
  2. Разрешить пользователю вводитьнезашифрованный текст и автоматически его разбирать везде, где они могут редактировать Task.due_date

Моей первой идеей был вспомогательный метод для форматирования времени, например:

<%= format_time task.due_date %>

в сочетании с перегруженным сеттеромна аксессоре в моей модели задач, например:

attr_accessor :due_date_string

def due_date_string=(string)
  self.due_date = Chronic.parse(string)
end

Это работает везде, где я хочу, чтобы за исключением в моих формах для редактирования:

<div class="field">
  <%= f.label :due_date %>
  <%= f.text_field :due_date_string %>
</div> 

Iне знаю, как правильно настроить элемент f.text_field для подключения, чтобы он сохранял: due_date_string, но использует вспомогательный метод для отображения строки.

Мне не обязательно нужны конкретные примеры кода, просто ищу вид рВо-вторых, здесь бы использовали профессиональные Rails-ы.

Спасибо!

Ответы [ 2 ]

1 голос
/ 25 октября 2011

Для использования:

f.text_field :due_date_string

Тебе также не нужен геттер для нового атрибута? например.,

def due_date_string
  format_time self.due_date
end

Возможно, поделитесь, какая ошибка или сбой происходит при использовании настраиваемого текстового поля. :)

1 голос
/ 25 октября 2011

В соответствии с соглашениями MVC обработка данных связана с ответственностью на уровне модели.Итак, вы идете в правильном направлении, чтобы выполнить установщик (обертка для атрибута due_date):

Вам необходимо проверить, является ли attr_acessible доступом, чтобы получить данные из параметров

def due_date_string=(string)
  self.due_date = Chronic.parse(string) || Date.today
end

.логика представления для отображения проанализированной даты - ответственность уровня помощника

...