【问题标题】:Show list of attachments using Paperclip in Rails Application在 Rails 应用程序中使用 Paperclip 显示附件列表
【发布时间】:2012-04-11 09:21:03
【问题描述】:

我在我的 rails 应用程序中遇到回形针问题。我可以将多个文件 (PDF) 附加到我的表单中,但是当我尝试在 show.html.erb 文件中显示超过 1 个附件时出现错误。

在编辑和新视图中工作的代码:

            <%= f.fields_for :assets do |asset| %>

               <% if asset.object.new_record? %>
                     <%= asset.file_field :document %>
               <% end %>

           <% end %>

    </div>

    <div class="existingPaperclipFiles">

         <% f.fields_for :assets do |asset| %>

              <% unless asset.object.new_record? %>

                    <div class="thumbnail">
                            <%= link_to( image_tag(asset.object.document.url(:thumb)), asset.object.document.url(:original) ) %>
                            <%= asset.check_box :_destroy %>
                    </div>

              <% end %>        

         <% end %>
    </div>

我创建了一个单独的资产模型来保存与我的设备模型相关的所有附件。当我在显示视图中创建“link_toasset.object.document.url”时,出现 NoMethod 错误。如果有比回形针更好的方法,我想将 .doc、PDF 和图像文件都附加到我的应用程序中,请帮忙!

资产模型:

class Asset < ActiveRecord::Base
  belongs_to :equipment

  has_attached_file :document, :styles => {:thumb => '150x150#', :medium => '300x300#', :large => '600x600#' }

end

设备型号:

class Equipment < ActiveRecord::Base
  validates :equipment_id, presence: true
  validates :location, presence: true

  has_many :assets, :dependent => :destroy
  accepts_nested_attributes_for :assets, :allow_destroy => true

end

我的设备控制器:

class EquipmentController < ApplicationController

  def index
    @equipment = Equipment.paginate(page: params[:page])
  end

  def show
    @equipment = Equipment.find(params[:id])


    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @equipment }
    end
  end

  def new
    @equipment = Equipment.new
    5.times {@equipment.assets.build}
  end

  def create
    @equipment = Equipment.new(params[:equipment])

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

  def edit
    @equipment = Equipment.find(params[:id])
    5.times {@equipment.assets.build}
  end

  def update
    @equipment = Equipment.find(params[:id])

    respond_to do |format|
      if @equipment.update_attributes(params[:equipment])
        format.html { redirect_to @equipment, notice: 'Equipment was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @equipment.errors, status: :unprocessable_entity }
      end
    end
  end

  def destroy
    @equipment = Equipment.find(params[:id])
    @equipment.destroy

    respond_to do |format|
      format.html { redirect_to equipment_url }
      format.json { head :no_content }
    end
  end

  private

    def correct_user
      @Equipment = Equipment.find(params[:id])
      redirect_to(root_path) unless current_user?(@Equipment)
    end

    def admin_user
      redirect_to(root_path) unless current_user.admin?
    end
end

非常感谢任何帮助。

【问题讨论】:

  • 请包含错误信息

标签: ruby-on-rails ruby paperclip


【解决方案1】:

您没有提供出现错误的显示视图的代码,但您应该能够执行以下操作来显示带有原始文件链接的缩略图:

<% @equipment.assets.each do |asset| %>

    <%= link_to image_tag(asset.document.url(:thumb)), asset.document.url(:original) %>

<% end %>

我不知道为什么你的 Paperclip URL 中有“object”,因为我没有看到 Paperclip 使用的格式。

【讨论】:

  • 感谢您的回答。出于某种原因,我一直坚持放入对象。我是一个新手,所以我时不时会被大脑阻塞。再次感谢。
  • 如果这回答了您的问题,您能否将其标记为解决方案?
【解决方案2】:

实际上,我可以通过执行以下操作来解决这个问题:

  <% for asset in @equipment.assets %>
    <p>
    <%= link_to asset.document_file_name,
                          asset.document.url(:original) %>
    </p>
  <% end %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    相关资源
    最近更新 更多