到目前为止,我使用Rails 4进行了以下设置
class Tournament < ActiveRecord::Base
has_many :fixtures
has_one :gallery
has_many :gallery_images, :through => :gallery
end
class Gallery < ActiveRecord::Base
belongs_to :tournament
has_many :gallery_images, dependent: :destroy
accepts_nested_attributes_for :gallery_images, allow_destroy: :true
end
class GalleryImage < ActiveRecord::Base
belongs_to :gallery
end
我的数据库设置如此
create_table "galleries", force: true do |t|
t.integer "tournament_id"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "gallery_images", force: true do |t|
t.datetime "created_at"
t.datetime "updated_at"
t.string "photo_file_name"
t.string "photo_content_type"
t.integer "photo_file_size"
t.datetime "photo_updated_at"
t.integer "gallery_id"
end
create_table "tournaments", force: true do |t|
t.string "name"
t.date "tourn_date"
t.string "tourn_location"
t.datetime "created_at"
t.datetime "updated_at"
end
我想把一个画廊及其所有图像放到一个对象中,以便我可以遍历每个锦标赛的所有gallery_images
<div id="verticalTab">
<ul class="resp-tabs-list">
<% @tournaments.each do |t| %>
<li><%= t.name %></li>
<% end %>
</ul>
<div class="resp-tabs-container">
<div>
<% @tournaments.each do |t| %>
<div class="clear"></div>
<% g.gallery_images.each do |i| %>
<ul class="team-gallery">
<li><%= image_tag(i.photo.url(:gallery_image)) %></li>
<% end %>
</ul>
<% end %>
控制器
def index
@tournaments = Tournament.all
end
我有点不确定如何按比赛分组gallery_images
赞赏任何指针
答案 0 :(得分:1)
为你的锦标赛模特尝试类似的东西
class Tournament < ActiveRecord::Base
has_many :fixtures
has_one :gallery
has_many :gallery_images, through: :gallery
end
然后在您的视图中,您可以执行类似
的操作 <ul class="resp-tabs-list">
<% @tournaments.each do |t| %>
<li><%= t.name %></li>
<% t.gallery_images.each do |img| %>
<% end %>
<% end %>
</ul>
或者你也可以像roman.brodetski那样做一些不需要你修改模型的东西
<ul class="resp-tabs-list">
<% @tournaments.each do |t| %>
<li><%= t.name %></li>
<% t.gallery.gallery_images.each do |img| %>
<% end %>
<% end %>
</ul>
(请注意,您的控制器变量名称@tournaments与您在视图中引用的名称不一致,因此结果为零)
另外需要注意的是,你的模特锦标赛和画廊是一对一的,我认为你可能想要的是你的问题是锦标赛和画廊是一对多的关系,在这种情况下你的锦标赛模型应该看起来像
class Tournament < ActiveRecord::Base
has_many :fixtures
has_many :galleries
end
在这种情况下,您可以让您的视图执行类似
的操作 <ul class="resp-tabs-list">
<% @tournaments.each do |t| %>
<li><%= t.name %></li>
<% t.galleries.map{|a| a.gallery_images}.flatten.each do |img| %>
<% end %>
<% end %>
</ul>