2013-04-04 49 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" 

希望有帮助。

相关问题