在轨道上的红宝石上传图像或文件4

时间:2014-08-18 13:06:58

标签: ruby-on-rails-4

在这里,我想要一个关于上传文件或图像的清晰概念,而不使用任何gem文件(例如:peperclip,carrierwave等)。

以前,我做过一些工作。我可以在“/ assets / images”文件夹中上传图片。但是当我在我的节目页面中调用它时,我看不到图像(只有一个断开图像的占位符)。 这是show page的截图:

screenshot of show page

如何在show.html.erb文件中显示这些图片?

这是我的ImagesController.rb文件:

class ImagesController < ApplicationController
  before_action :set_image, only: [:show, :edit, :update, :destroy]

  # GET /images
  def index
    @images = Image.all
  end

  # GET /images/1
  def show
  end

  # GET /images/new
  def new
    @image = Image.new
  end

  # GET /images/1/edit
  def edit
  end

  # POST /images
  def create
    @image = Image.new(image_params)
    if params[:image].present?
      file = params[:image][:picture]
      File.open(Rails.root.join('app','assets', 'images', file.original_filename), 'wb') do |f|
        f.write(file.read)
      end
    end

    respond_to do |format|
      if @image.save
        format.html { redirect_to @image, notice: 'Image was successfully created.' }
        format.json { render action: 'show', status: :created, location: @image }
      else
        format.html { render action: 'new' }
        format.json { render json: @image.errors, status: :unprocessable_entity }
      end

    end
  end


  def update
    respond_to do |format|
      if @image.update(image_params)
        format.html { redirect_to @image, notice: 'Image was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @image.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /images/1
  def destroy
    @image.destroy
    respond_to do |format|
      format.html { redirect_to images_url }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_image
      @image = Image.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def image_params
      params.require(:image).permit(:name)
    end
end

这是我的show.html.erb文件:

<p><%= @image.name %></p>

<p><%= image_tag @image.picture %></p>

这是我的schema.rb文件:

ActiveRecord::Schema.define(version: 20140725043842) do

  create_table "images", force: true do |t|
    t.string   "name"
    t.string   "picture"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

end

如果您需要有关我的项目的更多信息,请告诉我。 请给我一些建议。我想清楚地了解上传图像/文件并在不使用gemfile的情况下显示它们。

1 个答案:

答案 0 :(得分:1)

您必须将图像上传到不需要预编译的文件夹,就像资产一样。尝试将它们上传到public文件夹。

此外,您可能想要了解资产管道以及它们为什么不显示:

http://guides.rubyonrails.org/asset_pipeline.html

相关问题