2013-04-04 81 views
1

對不起,如果我使用了錯誤的術語,我仍然對rails有所瞭解。Rails:將值添加到Activerecord結果

問題:我在一個變量中檢索一個activerecord關係,我想在數組中的每個項中添加更多的鍵/值對,這樣他們都可以在視圖中輕鬆訪問。我該怎麼做呢?

控制器

def index 
    @rooms = Room.all.reverse 
    @sessions = Session.all 
    ##returns => [#<Session id: 4, user_ip: "127.0.0.1", user_token: "", room_session: "", position: 2 ...>], #<Session id: 3, ...>] 
    @sessions.map do |k, v| 
     ##Add the room associated with each session & other k/v pairs 
    end 
    ##want to return => [#<Session id: 4, room: 'Marvin', spaghetti: 'monster' (etc...), user_ip: "127.0.0.1", user_token: "", room_session: "", position: 2 ...>], #<Session id: 3, ...>] 

    end 
    end 

查看

- @sessions.each do |session| 
    %tr 
    %td= session.topic_id 
    %td= session.room 
    %td= session.spaghetti 

編輯: 我希望能夠加入像 '麪條'=> '怪物' 和信息任意值從關係如Session.room

這樣做的最好方法是什麼?

謝謝!

+0

其他屬性(除了房間)是否也是主動記錄關係還是他們是任意的?要添加房間,來自視圖的session.room呼叫應該已經分配了相關的房間(假設每個會話只有一個房間,否則你會想要做session.room.first或類似的事情)。爲了避免N +1,你的@session查找應該是Session.includes(:room).all。 – 2013-04-04 05:56:57

+0

謝謝你的評論。我更新了我的問題。一個簡單的問題,當我做Session.includes(:room).all.to_a時,它不包括任何房間的列,但我可以做Session.first.room或session.includes(:room).first.room並獲得與該會話相關的房間。任何想法如何讓它成爲原來的返回數組的一部分?再次感謝。 – 2013-04-04 17:22:52

回答

1

在會話數據庫查找過程中僅包含會議室查找空間(例如,如果您查看日誌,您會看到房間也被查找到。)然後,您可以通過關聯訪問高速緩存的房間(即session.room)

如果您想要添加任意項目,最好的方法是通過模型中的方法......例如在您的Session中類:

def spaghetti 
    "Monster" # or whatever else you wanted spaghetti to be. 
end 

然後你就可以訪問意大利麪條屬性在視圖就像你任何其他屬性,例如

session.spaghetti # => "Monster" 

希望有幫助。

相關問題