你好,親愛的程序員保存圖像,導軌4 - 數據庫
我試圖發展與電子書的Web應用程序 「Praxiswissen - Ruby on Rails的」。我的問題是我想通過表單將圖像保存到我的項目目錄中。該數據庫只是保存與節省時間的圖像的名字:
def unique_and_proper_filename(filename)
Time.now.to_i.to_s + '_' + File.basename(filename)
end
我的問題是,我的照片不得到保存我提交表單後。我沒有得到一些例外,這就是爲什麼我不知道我的問題在哪裏。
控制器:
class PostsController < ApplicationController
require 'will_paginate'
def new
@post = Post.new
end
# information about saving the picture
def create
@post = Post.new(params[:post].permit(:title, :description, :date, :image_file, :thumbnail_file))
# Form isn't correctly filled message
if [email protected]?
flash.now[:notice] = "Bitte füllen Sie alle Felder aus und überprüfen Sie Ihre Angaben."
render(:action => :new)
# Files weren't saved message
elsif [email protected]_files
flash.now[:notice] = "Es trat ein Fehler beim Hochladen der Dateien auf."
render(:action => :new)
# Files saved correctly message
else
@post.save
flash[:notice] = "Dateien wurden hochgeladen und die Daten wurden gespeichert."
redirect_to(:action => :list)
end
end
# list action for listing my pictures
def list
@posts = Post.paginate(:page => params[:page], :order => "date DESC", :per_page => 15)
@post_pages = Post.paginate(:page => params[:page], :order => "date DESC", :per_page => 15)
end
end
HTML表單:
<h2>Neues Foto anlegen</h2>
<%= form_tag({:action => :create}, :multipart => true) %>
<h3>Bilddaten</h3>
<p>
Titel<br/>
<%= text_field(:post, :title) %>
</p>
<p>
Beschreibungen<br/>
<%= text_field(:post, :description) %>
</p>
<p>
Datum und Uhrzeit<br/>
<%= datetime_select(:post, :date, :order => [:day, :month, :year, :hour]) %>
</p>
<p>
<h3>Datei-Upload</h3>
<p>
Bilddatei:<br/>
<%= file_field(:post, :image_file) %>
</p>
<p>
Thumbnail:<br/>
<%= file_field(:post, :thumbnail_file) %>
</p>
<%= submit_tag("Speichern") %>
</p>
</form>
型號:
class Post < ActiveRecord::Base
validates_presence_of(:title, :description, :date, :image, :thumbnail)
I18n.enforce_available_locales = false
def image_file= (fileobj)
if fileobj.size > 0
@image_file = fileobj
self.image = unique_and_proper_filename(fileobj.original_filename)
end
end
def thumbnail_file= (fileobj)
if fileobj.size > 0
@thumbnail_file = fileobj
self.thumbnail = unique_and_proper_filename(fileobj.original_filename)
end
end
def save_files
# Bilddatei save
if !save_uploaded_file(@image_file, IMAGE_DIR, self.image)
return false
end
# Thumbnail save
if !save_uploaded_file(@thumbnail_file, THUMBNAIL_DIR, self.thumbnail)
return false
end
end
private
def unique_and_proper_filename(filename)
Time.now.to_i.to_s + "_" + File.basename(filename)
end
private
def save_uploaded_file(fileobj, filepath, filename)
# Complete Path
complete_path = Rails.root + "/public/" + filepath
# if neccessary, create directory
FileUtils.mkdir_p(complete_path) unless File.exists?(complete_path)
# save data
begin
f = File.open(complete_path + "/" + filename, "wb")
f.write(fileobj.read)
rescue
return false
ensure
f.close unless f.nil?
end
end
end
我只獲得了有去一些錯誤保存文件的消息時,我正確填寫表格,但它應該返回一條消息,說我的文件已保存。
我很抱歉,我的問題很長,但我真的不知道我的問題在哪裏......如果需要更多信息或代碼,我會盡快添加它。
非常感謝您提前!
你的日誌文件(或服務器輸出)會告訴你表單中的參數,以及出錯的地方和發生的地方。診斷這樣的問題時,始終是您首先着手的地方。 –