From 8dd5db0145c2187c77331da065660c25165c864f Mon Sep 17 00:00:00 2001 From: Matthew Gerrior Date: Thu, 27 Aug 2015 15:11:50 -0400 Subject: [PATCH 1/2] First commit! --- app/controllers/todos_controller.rb | 16 ++++++++++++++++ app/models/todo.rb | 10 ++++++++++ app/views/todos/_form.html.erb | 4 ++-- app/views/todos/show.html.erb | 1 + .../20150827184912_add_img_path_to_todos.rb | 5 +++++ db/schema.rb | 3 ++- 6 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20150827184912_add_img_path_to_todos.rb diff --git a/app/controllers/todos_controller.rb b/app/controllers/todos_controller.rb index 0031b28..3008801 100644 --- a/app/controllers/todos_controller.rb +++ b/app/controllers/todos_controller.rb @@ -21,6 +21,7 @@ def edit # POST /todos def create + save_image(todo_params) @todo = Todo.new(todo_params) if @todo.save @@ -32,6 +33,13 @@ def create # PATCH/PUT /todos/1 def update + # save_image(todo_params) + if (todo_params[:img_blob]) + img_path = Todo.save_img_blob(todo_params[:img_blob]) + params[:img_path] = img_path + params.delete(:img_blob) + end + if @todo.update(todo_params) redirect_to @todo, notice: 'Todo was successfully updated.' else @@ -56,4 +64,12 @@ def set_todo def todo_params params.require(:todo).permit(:title) end + + def save_image(todo_params) + if (todo_params[:img_blob]) + img_path = Todo.save_img_blob(todo_params[:img_blob]) + params[:img_path] = img_path + params.delete(:img_blob) + end + end end diff --git a/app/models/todo.rb b/app/models/todo.rb index 8886e9b..433c41e 100644 --- a/app/models/todo.rb +++ b/app/models/todo.rb @@ -1,2 +1,12 @@ class Todo < ActiveRecord::Base + + PATH='#{Rails.root}/public/todo_imgs' + + def self.save_img_blob(blob) + path = File.join(PATH, "#{self.id}_img") + File.open(path, "w") do |file| + file << blob + end + path + end end diff --git a/app/views/todos/_form.html.erb b/app/views/todos/_form.html.erb index 27448b3..f9fe5df 100644 --- a/app/views/todos/_form.html.erb +++ b/app/views/todos/_form.html.erb @@ -1,5 +1,5 @@ <%= simple_form_for @todo do |f| %> - <%= f.input :name %> - + <%= f.input :title %> + <%= f.input :img_blob, :as => :file %> <%= f.submit %> <% end %> diff --git a/app/views/todos/show.html.erb b/app/views/todos/show.html.erb index d3a64d7..1aed6a1 100644 --- a/app/views/todos/show.html.erb +++ b/app/views/todos/show.html.erb @@ -1 +1,2 @@ <%= @todo.title %> + \ No newline at end of file diff --git a/db/migrate/20150827184912_add_img_path_to_todos.rb b/db/migrate/20150827184912_add_img_path_to_todos.rb new file mode 100644 index 0000000..a4cf667 --- /dev/null +++ b/db/migrate/20150827184912_add_img_path_to_todos.rb @@ -0,0 +1,5 @@ +class AddImgPathToTodos < ActiveRecord::Migration + def change + add_column :todos, :img_path, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 481e303..dcab544 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,10 +11,11 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20150714225535) do +ActiveRecord::Schema.define(version: 20150827184912) do create_table "todos", force: :cascade do |t| t.string "title" + t.string "img_path" end create_table "users", force: :cascade do |t| From 790384ee5d01ebbe21dfbb8ae3defcac7345152e Mon Sep 17 00:00:00 2001 From: Ross Kaffenberger Date: Thu, 27 Aug 2015 16:06:42 -0400 Subject: [PATCH 2/2] Working upload --- app/controllers/todos_controller.rb | 17 +++-------------- app/models/todo.rb | 15 ++++++++------- public/todo_imgs/1_img.jpeg | Bin 0 -> 6328 bytes 3 files changed, 11 insertions(+), 21 deletions(-) create mode 100644 public/todo_imgs/1_img.jpeg diff --git a/app/controllers/todos_controller.rb b/app/controllers/todos_controller.rb index 3008801..64cf404 100644 --- a/app/controllers/todos_controller.rb +++ b/app/controllers/todos_controller.rb @@ -21,8 +21,8 @@ def edit # POST /todos def create - save_image(todo_params) @todo = Todo.new(todo_params) + @todo.img = params[:todo][:img_blob] if params[:todo][:img_blob] if @todo.save redirect_to @todo, notice: 'Todo was successfully created.' @@ -34,11 +34,7 @@ def create # PATCH/PUT /todos/1 def update # save_image(todo_params) - if (todo_params[:img_blob]) - img_path = Todo.save_img_blob(todo_params[:img_blob]) - params[:img_path] = img_path - params.delete(:img_blob) - end + @todo.img = params[:todo][:img_blob] if params[:todo][:img_blob] if @todo.update(todo_params) redirect_to @todo, notice: 'Todo was successfully updated.' @@ -62,14 +58,7 @@ def set_todo # Only allow a trusted parameter "white list" through. def todo_params - params.require(:todo).permit(:title) + params.require(:todo).permit(:title, :img_path) end - def save_image(todo_params) - if (todo_params[:img_blob]) - img_path = Todo.save_img_blob(todo_params[:img_blob]) - params[:img_path] = img_path - params.delete(:img_blob) - end - end end diff --git a/app/models/todo.rb b/app/models/todo.rb index 433c41e..4ab9e18 100644 --- a/app/models/todo.rb +++ b/app/models/todo.rb @@ -1,12 +1,13 @@ class Todo < ActiveRecord::Base - PATH='#{Rails.root}/public/todo_imgs' + PATH="#{Rails.root}/public/todo_imgs" - def self.save_img_blob(blob) - path = File.join(PATH, "#{self.id}_img") - File.open(path, "w") do |file| - file << blob - end - path + def img=(img) + ext = File.extname(img.tempfile.path) + path = File.join(PATH, "#{self.id}_img#{ext}") + FileUtils.cp(img.tempfile.path, path) + parts = path.split("/") + path = "/#{parts[parts.length - 2, parts.length - 1].join("/")}" + self.img_path = path end end diff --git a/public/todo_imgs/1_img.jpeg b/public/todo_imgs/1_img.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..e20e6d4d02a75bcb14ab7a79824b4744fc62737b GIT binary patch literal 6328 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 ZRlF?QCSqk`6|lv5hRJ`fmgx5D{{Rjgmihny literal 0 HcmV?d00001