现在的位置: 首页 > 综合 > 正文

增加字段过程

2018年09月10日 ⁄ 综合 ⁄ 共 1639字 ⁄ 字号 评论关闭
文章目录

rails g migration add_course_cover
rake db:migrate 
models/course.rb

class Course < ActiveRecord::Base
  attr_accessible :name, :cid, :desc, :syllabus, :cover

  belongs_to :creator, :class_name => 'User', :foreign_key => :creator_id
  has_many :chapters
  has_many :course_wares, :through => :chapters

  validates :creator, :name, :cid, :desc, :syllabus, :presence => true

  default_scope order('id desc')
  max_paginates_per 50

  # carrierwave
  mount_uploader :cover, CourseCoverUploader

  module UserMethods
    def self.included(base)
      base.has_many :courses, :foreign_key => 'creator_id'
    end
  end
end

db/migrate/add_course_cover.rb

class AddCourseCover < ActiveRecord::Migration
  def change
    add_column  :courses, :cover, :string
  end
end

uploader/course_cover_uploader,rb

class CourseCoverUploader < CarrierWave::Uploader::Base
  # 存储方式 本地硬盘存储
  storage :file
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  # 给上传的文件重新命名
  def filename
    if original_filename.present?
      ext = file.extension.blank? ? "" : ".#{file.extension}"
      "#{secure_token}#{ext}"
    end
  end

  # 当文件不存在时的默认 url
  def default_url
    # For Rails 3.1+ asset pipeline compatibility:
    # asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
    "default_course_covers/#{version_name}.png"
  end

  # 允许上传的文件类型的扩展名
  def extension_white_list
    %w(jpg jpeg gif png)
  end

  # 切割图片
  include CarrierWave::MiniMagick

  protected
  def secure_token
    var = :"@#{mounted_as}_secure_token"
    model.instance_variable_get(var) || model.instance_variable_set(var, randstr)
  end
end

view:edit.html.haml

= simple_form_for @course do |f|
  = f.input :name
  = f.input :cid
  = f.input :desc, as: :text
  = f.input :syllabus, as: :text

  - if @course.cover
    = image_tag @course.cover.url

  = f.input :cover, as: :file
  = f.submit

抱歉!评论已关闭.