file attachments in db

This commit is contained in:
Devin Howard 2017-01-22 15:23:24 -05:00
parent dc8d274487
commit 3dc1db8836
5 changed files with 52 additions and 27 deletions

21
app/models/attachment.rb Normal file
View file

@ -0,0 +1,21 @@
class Attachment < ApplicationRecord
belongs_to :attachable, polymorphic: true
has_attached_file :file,
styles: lambda { |a|
a.instance.is_image? ? {
small: 'x200>',
medium: 'x300>',
large: 'x400>'
} : {}
}
validates_attachment_content_type :file, :content_type => [
/\Aimage\/.*\Z/,
/\Avideo\/.*\Z/
]
def is_image?
file.instance.file_content_type =~ %r(image)
end
end

View file

@ -21,22 +21,7 @@ class Topic < ApplicationRecord
validates :permission, presence: true validates :permission, presence: true
validates :permission, inclusion: { in: Perm::ISSIONS.map(&:to_s) } validates :permission, inclusion: { in: Perm::ISSIONS.map(&:to_s) }
# This method associates the attribute ":image" with a file attachment has_many :attachments, as: :attachable, dependent: :destroy
has_attached_file :image
# , styles: {
# thumb: '100x100>',
# square: '200x200#',
# medium: '300x300>'
# }
# Validate the attached image is image/jpg, image/png, etc
validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/
# This method associates the attribute ":image" with a file attachment
has_attached_file :audio
# Validate the attached audio is audio/wav, audio/mp3, etc
validates_attachment_content_type :audio, content_type: /\Aaudio\/.*\Z/
def synapses def synapses
synapses1.or(synapses2) synapses1.or(synapses2)

View file

@ -29,4 +29,7 @@ Rails.application.configure do
# Expands the lines which load the assets # Expands the lines which load the assets
config.assets.debug = false config.assets.debug = false
config.assets.quiet = true config.assets.quiet = true
# S3 file storage
config.paperclip_defaults = {} # store on local machine for dev
end end

View file

@ -0,0 +1,12 @@
class CreateAttachments < ActiveRecord::Migration[5.0]
def change
create_table :attachments do |t|
t.references :attachable, polymorphic: true
t.attachment :file
t.timestamps
end
remove_attachment :topics, :image
remove_attachment :topics, :audio
end
end

View file

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20161218183817) do ActiveRecord::Schema.define(version: 20170122201451) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -26,6 +26,18 @@ ActiveRecord::Schema.define(version: 20161218183817) do
t.index ["user_id"], name: "index_access_requests_on_user_id", using: :btree t.index ["user_id"], name: "index_access_requests_on_user_id", using: :btree
end end
create_table "attachments", force: :cascade do |t|
t.string "attachable_type"
t.integer "attachable_id"
t.string "file_file_name"
t.string "file_content_type"
t.integer "file_file_size"
t.datetime "file_updated_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["attachable_type", "attachable_id"], name: "index_attachments_on_attachable_type_and_attachable_id", using: :btree
end
create_table "delayed_jobs", force: :cascade do |t| create_table "delayed_jobs", force: :cascade do |t|
t.integer "priority", default: 0, null: false t.integer "priority", default: 0, null: false
t.integer "attempts", default: 0, null: false t.integer "attempts", default: 0, null: false
@ -272,14 +284,6 @@ ActiveRecord::Schema.define(version: 20161218183817) do
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.text "permission" t.text "permission"
t.string "image_file_name", limit: 255
t.string "image_content_type", limit: 255
t.integer "image_file_size"
t.datetime "image_updated_at"
t.string "audio_file_name", limit: 255
t.string "audio_content_type", limit: 255
t.integer "audio_file_size"
t.datetime "audio_updated_at"
t.integer "defer_to_map_id" t.integer "defer_to_map_id"
t.index ["metacode_id"], name: "index_topics_on_metacode_id", using: :btree t.index ["metacode_id"], name: "index_topics_on_metacode_id", using: :btree
t.index ["user_id"], name: "index_topics_on_user_id", using: :btree t.index ["user_id"], name: "index_topics_on_user_id", using: :btree