Skip to content

Instantly share code, notes, and snippets.

@drager
Last active August 29, 2015 14:00
Show Gist options
  • Save drager/7a68ae00e62f724dcb57 to your computer and use it in GitHub Desktop.
Save drager/7a68ae00e62f724dcb57 to your computer and use it in GitHub Desktop.
Parameters:
{"_method"=>"put",
"authenticity_token"=>"eDv4pcLTU0m3os+7OImIOdNQxouyQoSb3FojGMXMNh8=",
"forum_id"=>"ruby",
"topic_id"=>"asdasdasdasdasd"}
Rails.application.routes.draw do
#match 'login', to: 'sessions#new', as: 'session', via: [:get, :post]
get 'login', to: 'sessions#new', as: 'session'
post 'login', to: 'sessions#create', as: 'create_session'
get 'logout', to: 'sessions#destroy', as: 'destroy_session'
resources :users
root to: 'categories#index'
resources :forums, only: [:index, :show] do
resources :topics do
put :lock_topic
put :unlock_topic
resources :posts
end
end
end
- title "#{@topic.name} - #{@forum.name} - #{@forum.category.name} - Forum"
%[email protected]
- if flash[:notice]
%div{class: 'notice'}
= flash[:notice]
- if current_user
- if current_user.id == @topic.user_id || is_staff?
= link_to 'Edit topic', edit_forum_topic_path
- if [email protected]_locked
= link_to 'Lock topic', forum_topic_lock_topic_path(@forum, @topic), method: :put
- else
= link_to 'Unlock topic', forum_topic_unlock_topic_path(@forum, @topic), method: :put
.content
- @posts.each do |post|
%p= post.bodytext
- if current_user && [email protected]_locked
- if flash[:alert]
%div{class: 'alert'}
= flash[:alert]
= form_for([@forum, @topic, @post]) do |f|
= render :partial => 'posts/form', :locals => { :f => f }
%div{class: 'actions'}
= f.submit
- else
%p This topic is locked!
class TopicsController < ApplicationController
before_filter :find_forum
before_filter :authorize, only: [:new, :edit, :update]
before_action :set_topic, only: [:show, :edit, :update]
def index
redirect_to forum_path(@forum)
end
def show
@topic = Topic.friendly.find(set_topic)
@posts = @topic.posts.order('created_at ASC')
@post = Post.new
end
def new
@topic = Topic.new
@topic.posts.build
end
def edit
if @topic.is_owner_or_staff?(current_user)
@post = @topic.posts.first
else
redirect_to forum_topic_path(@forum, @topic)
end
end
def create
@topic = @forum.topics.build(topic_params)
logger.debug(topic_params)
respond_to do |format|
if @topic.save
@topic.update_attributes(user_id: current_user.id, last_post_id: @topic.posts.first.id)
format.html { redirect_to forum_topic_path(@forum, @topic), notice: 'Topic was successfully created.' }
else
format.html { render :new }
end
end
end
def update
respond_to do |format|
if @topic.update(topic_params)
format.html { redirect_to forum_topic_path(@forum, @topic), notice: 'Topic was successfully updated.' }
else
format.html { render :edit }
end
end
end
def lock_topic
@topic = Topic.friendly.find(params[:id])
@topic.update_attribute(:is_locked, true)
logger.debug(@topic)
redirect_to forum_topic_path(@forum, @topic), notice: "Topic is now locked!"
end
def unlock_topic
@topic = Topic.friendly.find(params[:id])
@topic.update_attribute(:is_locked, false)
redirect_to forum_topic_path(@forum, @topic), notice: "Topic is now unlocked!"
end
private
def find_forum
@forum = Forum.friendly.find(params[:forum_id])
end
def set_topic
@topic = Topic.friendly.find(params[:id])
end
# Allow only the white list
def topic_params
params.require(:topic).permit(:name, user_id: current_user.id , posts_attributes: [ :id, :bodytext ])
end
end
activerecord (4.1.0) lib/active_record/relation/finder_methods.rb:402:in `find_with_ids'
activerecord (4.1.0) lib/active_record/relation/finder_methods.rb:68:in `find'
friendly_id (5.0.3) lib/friendly_id/finder_methods.rb:20:in `find'
app/controllers/topics_controller.rb:54:in `lock_topic'
actionpack (4.1.0) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (4.1.0) lib/abstract_controller/base.rb:189:in `process_action'
actionpack (4.1.0) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (4.1.0) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
activesupport (4.1.0) lib/active_support/callbacks.rb:113:in `call'
activesupport (4.1.0) lib/active_support/callbacks.rb:113:in `call'
activesupport (4.1.0) lib/active_support/callbacks.rb:149:in `block in halting_and_conditional'
activesupport (4.1.0) lib/active_support/callbacks.rb:149:in `call'
activesupport (4.1.0) lib/active_support/callbacks.rb:149:in `block in halting_and_conditional'
activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `call'
activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `block in halting'
activesupport (4.1.0) lib/active_support/callbacks.rb:229:in `call'
activesupport (4.1.0) lib/active_support/callbacks.rb:229:in `block in halting'
activesupport (4.1.0) lib/active_support/callbacks.rb:229:in `call'
activesupport (4.1.0) lib/active_support/callbacks.rb:229:in `block in halting'
activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `call'
activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `block in halting'
activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `call'
activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `block in halting'
activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `call'
activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `block in halting'
activesupport (4.1.0) lib/active_support/callbacks.rb:86:in `call'
activesupport (4.1.0) lib/active_support/callbacks.rb:86:in `run_callbacks'
actionpack (4.1.0) lib/abstract_controller/callbacks.rb:19:in `process_action'
actionpack (4.1.0) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (4.1.0) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
activesupport (4.1.0) lib/active_support/notifications.rb:159:in `block in instrument'
activesupport (4.1.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.1.0) lib/active_support/notifications.rb:159:in `instrument'
actionpack (4.1.0) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (4.1.0) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
activerecord (4.1.0) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (4.1.0) lib/abstract_controller/base.rb:136:in `process'
actionview (4.1.0) lib/action_view/rendering.rb:30:in `process'
actionpack (4.1.0) lib/action_controller/metal.rb:195:in `dispatch'
actionpack (4.1.0) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
actionpack (4.1.0) lib/action_controller/metal.rb:231:in `block in action'
actionpack (4.1.0) lib/action_dispatch/routing/route_set.rb:80:in `call'
actionpack (4.1.0) lib/action_dispatch/routing/route_set.rb:80:in `dispatch'
actionpack (4.1.0) lib/action_dispatch/routing/route_set.rb:48:in `call'
actionpack (4.1.0) lib/action_dispatch/journey/router.rb:71:in `block in call'
actionpack (4.1.0) lib/action_dispatch/journey/router.rb:59:in `each'
actionpack (4.1.0) lib/action_dispatch/journey/router.rb:59:in `call'
actionpack (4.1.0) lib/action_dispatch/routing/route_set.rb:676:in `call'
rack (1.5.2) lib/rack/etag.rb:23:in `call'
rack (1.5.2) lib/rack/conditionalget.rb:35:in `call'
rack (1.5.2) lib/rack/head.rb:11:in `call'
actionpack (4.1.0) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
actionpack (4.1.0) lib/action_dispatch/middleware/flash.rb:254:in `call'
rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.1.0) lib/action_dispatch/middleware/cookies.rb:560:in `call'
activerecord (4.1.0) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.1.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:621:in `call'
activerecord (4.1.0) lib/active_record/migration.rb:380:in `call'
actionpack (4.1.0) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.1.0) lib/active_support/callbacks.rb:82:in `run_callbacks'
actionpack (4.1.0) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.1.0) lib/action_dispatch/middleware/reloader.rb:73:in `call'
actionpack (4.1.0) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
actionpack (4.1.0) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
actionpack (4.1.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.1.0) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.1.0) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.1.0) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.1.0) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.1.0) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.1.0) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.1.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
rack (1.5.2) lib/rack/runtime.rb:17:in `call'
activesupport (4.1.0) lib/active_support/cache/strategy/local_cache_middleware.rb:26:in `call'
rack (1.5.2) lib/rack/lock.rb:17:in `call'
actionpack (4.1.0) lib/action_dispatch/middleware/static.rb:64:in `call'
rack (1.5.2) lib/rack/sendfile.rb:112:in `call'
railties (4.1.0) lib/rails/engine.rb:514:in `call'
railties (4.1.0) lib/rails/application.rb:144:in `call'
rack (1.5.2) lib/rack/lock.rb:17:in `call'
rack (1.5.2) lib/rack/content_length.rb:14:in `call'
rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service'
C:/Ruby200/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service'
C:/Ruby200/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run'
C:/Ruby200/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment