Ruby on rails 如何将图像放入Ruby on Rails的数组中

Ruby on rails 如何将图像放入Ruby on Rails的数组中,ruby-on-rails,ruby-on-rails-3,for-loop,each,Ruby On Rails,Ruby On Rails 3,For Loop,Each,我有一个RubyonRails应用程序,允许用户保存多达6幅图像,然后在旋转木马中查看 图像以字符串形式保存为image、image_2、image_3、image_4、image_5、image_6 我希望能够编写一个“for”循环来显示旋转木马中的所有图像 将所有这些图像字符串组合成一个数组的最佳方法是什么,以便它们可以循环并由旋转木马输出 更多详细信息 我目前正在调用下面的图片,它可以工作,但不是特别干燥 <div style="position:relative"> &l

我有一个RubyonRails应用程序,允许用户保存多达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>
app/controllers/users_controller.rb
Class UsersController < ApplicationController
   def show
       @user = User.find params[:id]
       @images = @user.images
   end
end

图像

这一切都取决于您如何在数据库中设置
图像,以及您希望如何在视图中显示它们

如果您有
用户
模型中的图像,您可以这样称呼它们:

<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>
app/controllers/users_controller.rb
Class UsersController < ApplicationController
   def show
       @user = User.find params[:id]
       @images = @user.images
   end
end
这允许您调用:

@images = Image.all
@images.each do |image|
   image.attachment.url #-> image URL
end

这是Rails中处理图像/附件的标准方法,因为它直接绑定到
ActiveRecord
。因此,返回
图像
路径数组就是调用
Model.all
Model。其中

简单的解决方案是添加一个助手。所以在
helpers/places\u helper.rb中
write

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>


现在,place的6个
image_x
字段看起来有点臭,所以我更喜欢Rich Peck建议的嵌套模型,尽管我知道拥有6个字段更容易开始。向我们展示上下文和您在提到图像“字符串”时尝试的内容,您的意思是什么?你是说他们的本地化路径?谢谢你的回复!我在上面补充了一些进一步的解释。此实例中的图像使用carrierwave gem保存在Place模型上。希望我上面的额外信息能让事情变得更清楚:)谢谢你的帮助Nathanvda,只要总是有6张图片,这看起来就行了。如果缺少图像,则返回“src=“/assets””,这意味着根本不显示任何图像。如果图像对象是空的,你知道我该如何处理吗?我会做
compact
,它会删除nils。如果没有图像,
image\ux
nil还是一个空字符串?啊,糟糕,它们是以nil的形式出现的,它正在删除它们不存在的地方。现在好像在工作:)哦,不,又坏了。它正在传回一个src=“assets”。你必须给我更多的信息。代码不是简单地工作然后就不工作。你能找出区别吗?它什么时候起作用,什么时候不起作用?但是假设你给我们的代码总是有效的,我假设有些代码确实有空字符串而不是nil,所以我用一个模仿你上面代码的
select
替换了
compact