1

嘿,伙计们,我想在我的家中创建一个显示我最近的文章的框,在框中应该有帖子的标题和几行内容(我想这很可行)但我也想拥有通过神社和 trix 上传的帖子中的图像。一般来说,我不知道如何从帖子中获取图像以使用它们。我知道如果有更多图像可能会很困难,但我想将它们随机化。

我的模特 post.rb

class Post < ApplicationRecord
  validates :title, :content, :presence => true
  extend FriendlyId
  friendly_id :title, use: :slugged
end

我的模型图像.rb

class Image < ApplicationRecord
# adds an `image` virtual attribute
include ::PhotoUploader::Attachment.new(:image)

end

我的图像控制器

class ImagesController < ApplicationController
  respond_to :json

  def create
    image_params[:image].open if image_params[:image].tempfile.closed?

    @image = Image.new(image_params)

    respond_to do |format|
      if @image.save
        format.json { render json: { url: @image.image_url }, status: :ok }
      else
        format.json { render json: @image.errors, status: :unprocessable_entity }
      end
    end
  end

  private

  def image_params
    params.require(:image).permit(:image)
  end

结尾

4

1 回答 1

0

您需要生成一个签名来处理多个文件。使用神社,它看起来像这样:

# db/migrations/001_create_photos.rb
create_table :images do |t|
  t.integer :imageable_id
  t.string  :imageable_type
  t.text    :image_data
  t.text    :image_signature
end
add_index :images, :image_signature, unique: true

# app/uploaders/image_uploader.rb
class ImageUploader < Shrine
  plugin :signature
  plugin :add_metadata
  plugin :metadata_attributes :md5 => :signature

  add_metadata(:md5) { |io| calculate_signature(io) }
end

# app/models/image.rb
class Image < ApplicationRecord
  include ImageUploader::Attachment.new(:image)
  belongs_to :imageable, polymorphic: true

  validates_uniqueness_of :image_signature
end

同样为了代码的一致性,可以将其称为图像或照片。您的上传器称为照片,但在其他任何地方都称为图像。

您需要的最后一个更改是在您的控制器中,以便它接受一组图像而不是一个图像。为此,您只需使用一个数组:

def show
  @image = Image.order('RANDOM()').limit(1).first
end

private
def images_params
  params.require(:images).permit(images: [)
end
于 2018-08-18T21:54:08.540 回答