Как отобразить последнее загруженное изображение скрепки devise current_user?

#ruby-on-rails #ruby #devise #paperclip

#ruby-on-rails #ruby #devise #скрепка

Вопрос:

У меня есть панель мониторинга, настроенная так, чтобы отображалась последняя загрузка current_user (помощник devise), однако отображается последняя загрузка независимо от того, кто является current_user.

контроллер панелей мониторинга:

 class DashboardsController < ApplicationController
  def index
    @todo_lists = current_user.todo_lists
    @paperclip_image = PaperclipImage.last
    @paperclip_image.user = current_user
  end
end
 

модель paperclip_image:

 class PaperclipImage < ActiveRecord::Base
  belongs_to :user

  has_attached_file :asset, styles: {
    medium: "300x300>",
    small: "140x140>",
    thumb: "60x64!"
  }

  validates_attachment_content_type :asset, :content_type => /Aimage/.*Z/

end
 

модель пользователя:

 class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_many :todo_lists
  has_many :todo_items
  has_many :paperclip_images
end
 

dashboards index.html.erb

 <div class="col-sm-6">
    <h3> Latest Prototype </h3>
    <%= link_to image_tag(@paperclip_image.asset.url(:medium), class: "img-thumbnail"), @paperclip_image.asset.url %>
    <div class="col-sm-12">
        <p class="paperclip-images-icons">
            <%= link_to image_tag("edit.png", :alt => "Reupload Image", :title => "Reupload Image"), edit_paperclip_image_path(@paperclip_image) %>
            <%= link_to image_tag("list.png", :alt => "See All Images", :title => "See All Images"), paperclip_images_path %>
        </p>
    </div>
</div>
 

установлены драгоценные камни:

 gem 'rails', '4.1.0'
gem 'sqlite3'
gem 'sass-rails', '~> 4.0.3'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0',          group: :doc
gem 'spring',        group: :development
gem 'paperclip', '~> 4.1'
gem 'devise'
 

Спасибо!

Ответ №1:

Это потому, что вы получаете самое последнее изображение скрепки с

 @paperclip_image = PaperclipImage.last
 

и с вашей строкой

 @paperclip_image.user = current_user
 

Вы говорите, что с последним PaperclipImage я хочу назначить его пользователя current_user. И это именно то, что произойдет, если вы добавите строку @paperclip_image.save!

Вам нужно будет найти последнее изображение текущего пользователя PaperclipImage

Что-то вроде:

 @paperclip_image = current_user.paperclip_images.last
 

итак, все Index Action должно выглядеть так:

 def index
  @todo_lists = current_user.todo_lists
  @paperclip_image = current_user.paperclip_images.last
end
 

Комментарии:

1. Аааа — я делал это раньше, но получал сообщение об ошибке, но теперь, когда вы подтвердили это решение, я проверил еще раз, и, похоже, ошибка была связана с тем, что у пользователя не было никаких изображений, поэтому я действительно все сделал правильно, но просто нужно было исправить исключение. Большое вам спасибо!