2015-02-24 28 views
0

我有两个表:查询或迭代连接表中的ActiveRecord/Rails的

Venues 
has_many :venue_intel_maps 

VenueIntelMap 
belongs_to :venue 

venue_intel_map表有一个列叫做:tag_label,我要抢具有各自特定的场地venue_intel_map

以我控制器低于该返回每个场地然后每个地点具有venue_id

的阵列
def show 
    @venues = Venue.where(parent_venue_id: current_admin.parent_venue_id) 
end 

因此,在我的观点中,我可以为特定场地做到这一点。

- @venues.each do |venue| 
    =venue.name 
    =venue.address 
    =venue.location 

但因为我想要去venue_intel_maps表,所以我可以叫一列名为:tag_label我想避免嵌套的每一个可能是这个样子

- @venues.each do |venues| 
    - venues.venue_intel_maps.each do |intel_maps| 
      = intel_maps.tag_label 

说法是有无论如何,我可以清理这个或任何建议?我试图在活动记录中使用.joins或.select,但不知道如何成功地做到这一点,所以我可以以某种方式将我的Venues模型中的逻辑。

编辑

难道也更好不知何故在控制器我的场地做这个定义?在视图中,我将从我的venue_intel_maps表中抽取所有东西,这样可以带来什么好处?

@venues = Venue.joins(:venue_intel_maps).where(parent_venue_id: current_admin.parent_venue_id) 
+0

尝试场地=场地.includes(:venue_intel_maps)..在移动设备上似乎无法使用@ll – Mingsheng 2015-02-24 00:40:08

+0

连接不会预先加载venue_intel_maps。要使用包括。但是,是的,在控制器中使用它。否则,你可以做什么messanjah建议 – Mingsheng 2015-02-24 01:10:47

回答

0

你可以在控制器预加载(Rails的3+)的venue_intel_maps

def show 
    @venues = Venue.where(
    parent_venue_id: current_admin.parent_venue_id 
    ).preload(:venue_intel_maps) 
end 

然后在视图中,使用您建议的迭代

- @venues.each do |venue| 
    = venue.name 
    = venue.address 
    = venue.location 
    = venue.venue_intel_maps.each do |intel_maps| 
    = intel_maps.tag_label