2009-02-09 79 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「'插入到」文本「字段中的任何網址中。

我的第一個,雖然將有這樣的事情在控制器:

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 

而且作爲最後一點,如果你繼續到處格式化時間以同樣的方式你視圖,您可以延長Time課程並使您的通話更加簡潔。在我的初始化文件夾中我加,我加入這個小行

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

現在我要做的就是就是所說的「」 conversions.rb」文件:

time_object.to_s(:shift) 

隨時隨地回我經常使用的格式化字符串在應用程序中。你可以有一個你最喜歡的格式清單,以清理你的觀點,並使其更容易理解。

2

您可能想要將一些實例方法添加到TwitterStatus模型中。 例如:

def formatted_date 
    self.date.formatDate 
end 
0

格式化的責任真的屬於這個觀點。

「Rails方式」將添加一個輔助方法來進行格式化。

有一個幫手模塊與每個控制器和一個全局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 -%> 
相關問題