Rails: 图片更新后改变位置

Rails: image change position after being updated

我正在为朋友建立一个摄影网站,她希望能够上传、编辑和删除图像。 在本地主机上一切正常,但我注意到当我编辑图像时,它会改变位置并成为最后一个。有谁知道为什么会这样,或者可以告诉我如何从创建日期开始对图像进行排序?

index.html.erb:

<section class='container'>
  <article id='gallery'>
    <% PreviewPicture.all.each do |preview_picture| %>
      <a class="fancybox" rel="group" href="<%= preview_picture.picture.image.url(:original)%>" ><%= image_tag preview_picture.image.url(:original), :class => 'grayscale' %></a>
        <% if user_signed_in? %>
          <%= link_to "Delete #{preview_picture.id}", preview_picture_path(:id => preview_picture.id), method: :delete %>
          <%= link_to "Edit #{preview_picture.id}", edit_preview_picture_path(:id => preview_picture.id) %>
        <% end %>
    <% end %>
  </article>
</section>

<% if user_signed_in? %>
  <%= link_to "Add Picture", new_preview_picture_path, :class => "add_preview_picture" %>
<% end %>

gallery.css:

section.container {
  margin-top: 100px;
  text-align: center;
  width: 69%;
}

img.grayscale{ 
  margin: 1.5px 0px;
  filter: grayscale(100%);
  -webkit-filter: grayscale(100%);  /* For Webkit browsers */
  filter: gray;  /* For IE 6 - 9 */
}

img.grayscale:hover{ 
  filter: grayscale(0%);
  -webkit-filter: grayscale(0%);
  filter: none;
}

您需要在 PreviewPicture 模型上创建一个范围或 class 方法,以按创建或更新日期对图片进行排序。

class PreviewPicture < ActiveRecord::Base
    def self.by_date
       order(created_at: :desc) // or order(updated_at: :desc)
    end
end

那么你可以这样使用它:

PreviewPicture.by_date.each

最好在控制器中进行设置,因此在您的视图对应的 PreviewPictureController 操作中:

@preview_pictures = PreviewPicture.by_date

然后在您的视图中遍历 @preview_pictures 实例变量。