ruby-on-rails – Rails 4 – 在数据库中保存图像
发布时间:2020-12-17 01:52:49 所属栏目:百科 来源:网络整理
导读:亲爱的程序员你好, 我正在尝试使用电子书“Praxiswissen – Ruby on Rails”开发一个Web应用程序.我的问题是我想通过表单将图像保存到我的项目目录中.数据库只保存图片的名称,节省时间: def unique_and_proper_filename(filename) Time.now.to_i.to_s + '_'
亲爱的程序员你好,
我正在尝试使用电子书“Praxiswissen – Ruby on Rails”开发一个Web应用程序.我的问题是我想通过表单将图像保存到我的项目目录中.数据库只保存图片的名称,节省时间: 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 !@post.valid? 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 !@post.save_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],: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,: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,: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 当我正确填写表单时,我只收到保存文件出错的消息,但它应该返回一条消息,说明我的文件已保存. 对于那么长的问题,我很抱歉,但我真的不知道我的问题在哪里……如果需要更多的信息或代码,我会尽快添加它. 非常感谢你提前! 解决方法
对不起,我只能推荐我们用的东西:
回形针 我感谢您使用的是教程,但我强烈建议您使用Paperclip gem 这将为您处理所有繁重的工作: #GemFile gem "paperclip","~> 4.1.1" 模型 #app/models/post.rb Class Post < ActiveRecord::Base has_attached_file :image end #migration add_attachment :posts,:image 调节器 #app/controllers/posts_controller.rb def new @post = Post.new end def create @post = Post.new(post_params) end private def post_params params.require(:post).permit(:image,:other,:params) end 视图 #app/views/posts/new.html.erb <%= form_for @post do |f| %> <%= f.file_field :image %> <% end %> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |