回形针和Dropbox错误

时间:2014-05-16 19:08:24

标签: ruby-on-rails heroku paperclip dropbox

Heroku是一个狡猾的小女孩。 我将图像上传到公共文件夹,但是heroku不喜欢它,所以新的交易上传到s3,但我没有信用卡。 Sooo我正在使用paperclip-dropbox将图像上传到Dropbox,然后显示它们。我创建了一个帐户和一个应用程序。但是对于所有代码和教程,我没有任何关系:

 Paperclip::Error in GaleriaController#create
 Galerium model missing required attr_accessor for 'foto_file_name'


 app/controllers/galeria_controller.rb:64:in `new'
 app/controllers/galeria_controller.rb:64:in `create'

用西班牙语。 “foto”是图像,“galeria”是数据库。

迁移/ 123491234691274_create_galeria.rb

class CreateGaleria < ActiveRecord::Migration
 def change
   create_table :galeria do |t|
     t.string :titulo
     t.string :descripcion
     t.string :extension

     t.timestamps
   end

  add_attachment :galeria, :foto
 end
end

应用/模型/ galerium.rb

class Galerium < ActiveRecord::Base
 attr_accessible :descripcion, :titulo , :foto 
 has_attached_file :foto ,
   :storage => :dropbox,
   :dropbox_credentials => "#{Rails.root}/config/dropbox_config.yml",
   :styles => {},  
   :dropbox_options => {       
   :path => proc { |style| "#{Rails.env}/#{style}/#{id}_#{picture.original_filename}"},            :unique_filename => true 
    }
 def self.search(query)
   where("titulo like ?", "%#{query}%") 
 end
end

应用/控制器/ galeria_controller.rb

 $paginate = true
 class GaleriaController < ApplicationController
 #Index de galeria
   def index
     if params[:search]
       @fotos = Galerium.search(params[:search]).order("created_at DESC")
       $paginate = false
       @search_params = params[:search]
      else
       @fotos = Galerium.paginate(page: params[:page], per_page: 8).find(:all, :order => "id desc")
       $paginate  = true
     end  

     respond_to do |format|
       format.html # index.html.erb
       format.json { render json: @fotos } #no sirve
     end
   end

   # GET /galeria/1
   # GET /galeria/1.json
   def show

     @galerium = Galerium.find(params[:id])

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

   # GET /galeria/new
   # GET /galeria/new.json
   def new

       @galerium = Galerium.new

       respond_to do |format|
         format.html # new.html.erb
        format.json { render json: @galerium }
       end   
   end

   # GET /galeria/1/edit
   def edit    

       @galerium = Galerium.find(params[:id])
   end

   # POST /galeria
   # POST /galeria.json
   def create

      @galerium = Galerium.new(params[:galerium])

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

   # PUT /galeria/1
   # PUT /galeria/1.json
   def update
      @galerium = Galerium.find(params[:id])

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

   # DELETE /galeria/1
   # DELETE /galeria/1.json
   def destroy
      @galerium = Galerium.find(params[:id])
      @galerium.destroy

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

   end
   def galeria_params
     params.require(:galeria).permit(:titulo, :descripcion, :foto)
   end
 end

即使我已经跑了

  rake db:migrate

 rake db:reset

1 个答案:

答案 0 :(得分:0)

我之前看到过这个错误 - 我原先认为它是由于数据库中缺少paperclip列引起的。但是,根据various sources,情况并非如此。

该错误似乎是一个常见问题,有几个修复:

-

<强> heroku run rake db:migrate

似乎问题的最常见原因是您的heroku db未使用所需列更新。您已尝试在本地运行迁移,但未在生产中运行

如果您使用Herouk toolbelt,,可以使用heroku run rake db:migrate在heroku实例上触发命令

-

<强> strong params

Rails 4强调使用strong params。除了上面的答案,您还需要确保正确使用您的代码:

#app/controllers/galeria_controller.rb
def create
   @galeria = Galeria.new galeria_params
end

private

def galeria_params
    params.require(:galaria).permit(:galeria, :params, :foto)
end

-

paperclip-dropbox

您可能需要考虑的另一件事是使用paperclip-dropbox gem。这是标准paperclip gem的添加剂,可促进您的应用与dropbox之间的互动

你在使用这个宝石吗?