我有两张桌子:
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或.selects,但不知道如何成功地这样做,所以我可以以某种方式将逻辑放在我的Venues模型中。
修改
以某种方式在控制器中定义我的场地这样做会更好吗?在视图中,我将从我的venue_intel_maps表中提取内容,这会有什么好处吗?
@venues = Venue.joins(:venue_intel_maps).where(parent_venue_id: current_admin.parent_venue_id)
答案 0 :(得分:0)
取决于您的Rails版本,请尝试:
@venues.venue_intel_maps.pluck(:tag_label)
@venues.venue_intel_maps.map(&:tag_label)
请参阅:http://rubyinrails.com/2014/06/rails-pluck-vs-select-map-collect/
答案 1 :(得分: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