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
答案 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
gem。这是标准paperclip
gem的添加剂,可促进您的应用与dropbox
之间的互动
你在使用这个宝石吗?