Skip to content

Instantly share code, notes, and snippets.

@johnny2k
Created July 20, 2012 06:00
Show Gist options
  • Save johnny2k/3148966 to your computer and use it in GitHub Desktop.
Save johnny2k/3148966 to your computer and use it in GitHub Desktop.
class Knowledge < ActiveRecord::Base
has_one :knowledge_file, :dependent => :destroy
attr_accessible :problem, :solution, :knowledge_file_attributes
accepts_nested_attributes_for :knowledge_file
class KnowledgeFile < ActiveRecord::Base
belongs_to :knowledge
end
class KnowledgeFilesController < ApplicationController
layout 'application'
def create
uploaded_io = params[:knowledge_file][:name]
@knowledge_file = KnowledgeFile.new(params[:knowledge_file])
@knowledge_file.knowledge_id = params[:knowledge_id]
@knowledge_file.update_attribute("name", uploaded_io.original_filename)
File.open(Rails.root.to_s + '/public/uploads/' + params[:knowledge_id] + "-" + uploaded_io.original_filename, 'wb') do |file|
file.write(uploaded_io.read)
redirect_to :back
end
end
def destroy
@knowledge_file = KnowledgeFile.find(params[:id])
@knowledge = @knowledge_file.knowledge_id
if File.exist?("#{Rails.root}/public/uploads/#{@knowledge_file.name}")
File.delete("#{Rails.root}/public/uploads/#{@knowledge_file.name}")
redirect_to :back
else
flash[:notice] = "The file has been deleted"
end
@knowledge_file.destroy
end
def upload
uploaded_io = params[:knowledge_file][:name]
@knowledge_file = KnowledgeFile.new(params[:knowledge_file])
@knowledge_file.knowledge_id = params[:knowledge_id]
@knowledge_file.update_attribute("name", uploaded_io.original_filename)
File.open(Rails.root + '/public/uploads/' + uploaded_io.original_filename, 'w') do |file|
file.write(uploaded_io.read)
redirect_to :back
end
end
def download
file = KnowledgeFile.find(params[:id])
send_file Rails.root + '/public/uploads/' + file.name
end
end
class KnowledgesController < ApplicationController
def index
if params[:q].present?
@knowledges = Knowledge.search(params[:q])
else
@knowledges = Knowledge.all
end
respond_to do |format|
format.html
end
end
def new
@knowledge = Knowledge.new
@knowledge_file = KnowledgeFile.new
respond_to do |format|
format.html
end
end
def show
@knowledge = Knowledge.find(params[:id])
@files = KnowledgeFile.find_all_by_knowledge_id(@knowledge)
respond_to do |format|
format.html
end
end
def create
@knowledge = Knowledge.new(params[:knowledge])
if @knowledge.save
redirect_to knowledges_path
else
redirect_to new_knowledge_path
end
end
def update
@knowledge = Knowledge.find(params[:id])
@knowledge.update_attribute(params[:knowledge])
respond_to do |format|
if @knowledge.save
format.html { redirect_to knowledges_path }
else
format.html { render :action => "edit" }
end
end
end
def edit
@knowledge = Knowledge.find(params[:id])
respond_to do |format|
format.html
end
end
def destroy
@knowledge = Knowledge.find(params[:id])
@knowledge.destroy
redirect_to knowledges_path
end
def search
if params[:q].present?
@knowledges = Knowledge.search(params[:q])
else
@knowledges = Knowledge.all
end
respond_to do |format|
format.html { redirect_to :action => "index" }
end
end
end
<%= form_for @knowledge do |knowledge_form| %>
<%= knowledge_form.label("Problem") %><br />
<%= knowledge_form.text_area(:problem, :size => "84x6") %><br />
<%= knowledge_form.label("Solution") %><br />
<%= knowledge_form.text_area(:solution, :size => "84x6") %><br />
<%= knowledge_form.fields_for :knowledge_files, :multipart => true do |knowledge_files_form| %>
<%= knowledge_files_form.label("File") %>
<%= knowledge_files_form.file_field :name %>
<%= knowledge_files_form.text_field :description %>
<% end %>
<%= knowledge_form.submit "Save" %>
<% end %>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment