2012-01-06 67 views
0

控制器: @users = User.all如何添加對用戶Ruby on Rails的類和排序呢?

檢視:

<%= @users %> 

結果[#<User id: 1, email: "[email protected]", location: "London">, #<User id: 2, email: "[email protected]", location: "Paris">]


如何添加到用戶類不添加多一個對它來建模? 類似:
控制器:

@users.each do |user| <br> 
    @type = Types.find(:last, :conditions => ["user_id_addressedto = #{user.id}"]) 
    user << @type 
end 
@users.sort_by(:type) 

在我想看看結果到底爲:
查看:

<%= @users %> 

結果:[#<User id: 2, email: "[email protected]", location: "Paris", type: "5">, #<User id: 1, email: "[email protected]", location: "London", type: "2">]

+1

正確答案:將其添加到模型中。還有正確的答案:爲什麼你不想把它添加到模型中? [注意:「模型」不是「數據庫」的同義詞] – Amadan 2012-01-06 11:42:10

+0

你能給出一個建議如何將它添加到模型中嗎? (正如你所看到的,我還需要與另一個模型進行交互),謝謝你的迴應! – antsav 2012-01-06 12:03:32

+0

如果你有很多用戶,那麼爲每個用戶發佈一個單獨的類型查詢將是非常低效的。我會考慮重構模型域。 – 2012-01-06 12:34:31

回答

0
class User 

    # ... 

    def type 
    return @type if @type 
    @type = Types.find(:last, :conditions => ["user_id_addressedto = #{user.id}"]) 
    end 
end 

這樣,它在模型中,但不在數據庫本身 - 它被緩存,因此只有在您第一次需要它時纔會被查詢。也就是說,只有在你不太需要時才需要它。

注意:如果您要吸引25位用戶並閱讀他們的type,則需要額外的25個SQL調用。也許你寧願做一個協會,或者一個scope專欄。

+0

實現緩存的更簡單的方法是:'@type || = Type.find( ...)'。 – Behrang 2012-01-06 16:05:36

+0

啊......確實如此。 – Amadan 2012-01-06 16:10:53

+0

說:未定義的局部變量或方法'類型'爲#<#:0x55f6c20>' – antsav 2012-01-08 06:10:33