我有一个Ruby on Rails应用程序,允许用户保存最多6张图像,然后可以在旋转木马中查看。
图像保存为字符串,如image,image_2,image_3,image_4,image_5,image_6。
我希望能够编写一个'for'循环来显示我的旋转木马中的所有图像。
将所有这些图像字符串组合成一个数组的最佳方法是什么,以便它们可以循环并通过轮播输出?
更多详情
我目前正在调用下面的图片,但这些图片有效,但并不特别干。
<div style="position:relative">
<div id="home-carousel" class="carousel">
<div class="carousel-inner">
<div class="item active">
<%= image_tag @place.image %>
</div>
<% if @place.image_2.present? %>
<div class="item">
<%= image_tag @place.image_2 %>
</div>
<% end %>
<% if @place.image_3.present? %>
<div class="item">
<%= image_tag @place.image_3 %>
</div>
<% end %>
<% if @place.image_4.present? %>
<div class="item">
<%= image_tag @place.image_4 %>
</div>
<% end %>
<% if @place.image_5.present? %>
<div class="item">
<%= image_tag @place.image_5 %>
</div>
<% end %>
<% if @place.image_6.present? %>
<div class="item">
<%= image_tag @place.image_6 %>
</div>
<% end %>
</div>
</div>
</div>
我希望能够将下面的内容转换为一个简单的for循环,它将遍历6个图像对象中的每一个并返回那些图像对象。更像是这样:
<div style="position:relative">
<div id="home-carousel" class="carousel">
<div class="carousel-inner">
<% @place.images.each do |image| %>
<div class="item">
<%= image_tag image %>
</div>
<% end %>
</div>
</div>
</div>
答案 0 :(得分:1)
简单的解决方案是添加帮助器。所以在helpers/places_helper.rb
写
module PlacesHelper
def get_carrousel_images(place)
[
@place.image_1,
@place.image_2,
@place.image_3,
@place.image_4,
@place.image_5,
@place.image_6
].select {|img| img.present? }
end
然后您可以在视图中写下以下内容:
<div style="position:relative">
<div id="home-carousel" class="carousel">
<div class="carousel-inner">
<% get_carrousel_images(@place).each do |image| %>
<div class="item">
<%= image_tag image %>
</div>
<% end %>
</div>
</div>
</div>
现在有6个image_x
字段的位置看起来有点臭,所以我更喜欢嵌套模型而不是Rich Peck建议的,虽然我知道有6个字段更容易入手。
答案 1 :(得分:0)
图片强>
这一切都取决于您如何在数据库中设置images
,以及您希望如何在视图中显示它们
如果你有User
模型中的图像,你可以这样称呼它们:
app/controllers/users_controller.rb
Class UsersController < ApplicationController
def show
@user = User.find params[:id]
@images = @user.images
end
end
这显然非常普遍 - 我建议您在问题中发布一些背景信息,以便我们知道您具体要求的内容
-
<强>回形针强>
如果您使用的是Paperclip
或Carrierwave
,则基本上会将图像附加到数据库中的各种对象上。例如,您将拥有以下内容:
#app/models/image.rb
Class Image < ActiveRecord::Base
has_attached_file :attachment
end
这允许您致电:
@images = Image.all
@images.each do |image|
image.attachment.url #-> image URL
end
这是处理Rails中图像/附件的标准方法,因为它直接绑定到ActiveRecord
。因此,返回一系列image
路径就是调用Model.all
或Model.where