2009-02-09 3 views
0

Допустим, что в контроллере я получить массив объектов из базы данных таким образом:Лучший способ изменить/форматировать данные базы данных в контроллере?

@statuses = TwitterStatus.find(:all, :order => "tweet_id DESC", :include => :twitter_user) 

Кроме того, я следующий цикл в представлении:

<% unless @statuses.nil? -%> 
<ol> 
    <% for status in @statuses %> 
    <li><%= h(status.text -%>/li> 
    <% end -%> 
</ol> 
<% end -%> 

У меня есть намного больше данных в моем классе модели (информация о пользователе, status_id и т. д.), которые я хотел бы добавить в представление.

Проблема в том, что большая часть этой даты должна быть изменена. Мне нужно отформатировать даты определенным образом. Я хотел бы вставить «target =» _ blank »в любые URL-адреса в поле« текст ».

Мой первый хотя бы иметь что-то вроде этого в контроллере:

for status in @statuses 
    status.date = status.date.formatDate 
    status.url = status.date.insertTarget 
    status.user = status.user.doUserstuff 

    #Adding new attribute 
    status.username = status.user.lookupUserName 

end 

Это просто чувствует своего рода хромой ко мне. Но я не могу придумать ничего лучшего.

ответ

3

Я хочу согласиться с Арамом. Мои представления были усеяны кодом форматирования, пока я не начал добавлять методы модели, которые их тщательно очищали. В моем последнем приложении это были имена и времена (приложение для планирования сотрудников).

class Employee 

def full_name 
    self.first_name + " " + self.last_name 
end 

end 

И время всегда было больно, время было повсюду в моих взглядах (и жизненно важно для приложения). Поэтому везде, где я хотел, чтобы отобразить время начала, вместо того, чтобы вызвать атрибут я хранится в базе данных, я назвал пользовательский метод

class Schedule 

def formatted_start_time 
    self.start_time.strftime('%I:%M%p') 
end 

end 

Также в заключительной ноте, если вы по-прежнему раз, форматирование точно так же везде в вашем просмотров, вы можете расширить класс времени и сделать ваши звонки более сжатыми. В моей папке инициализаторов я добавил файл «» conversions.rb», где я добавил эту маленькую линию

Time::DATE_FORMATS.update(:shift => '%I:%M%p') 

Теперь я все это есть вызов:

time_object.to_s(:shift) 

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

2

Возможно, вы захотите добавить некоторые методы экземпляра в модель TwitterStatus. Например:

def formatted_date 
    self.date.formatDate 
end 
0

Ответственность за форматирование действительно относится к виду.

«Rails Way» - это добавить вспомогательный метод для форматирования.

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

например, если ваш контроллер StatusController

module StatusHelper 

    def status_text(status) 
    # do all your formatting and HTML escaping here 
    ... 
    end 

end 

и в представлении

<% unless @statuses.nil? -%> 
    <ol> 
    <% for status in @statuses %> 
     <li><%= status_text(status) -%></li> 
    <% end -%> 
    </ol> 
<% end -%>