I tried to route as following with my 2 models pimp and mepager (one-to-one relation):
/config/routes.rb
root :to => 'pimps#index'
get '/:pimp_id/mepager', :to => 'mepager#show', :as => 'mepager'
My mepager show action looks like this:
/app/controllers/mepagers_controller.rb
before_action :set_pimp
def show
#mepager = #pimp.mepager
end
private
def set_pimp
#pimp = Pimp.find(params[:pimp_id])
end
Now I tested in the rails console the function Pimp.first.mepager what should be equal to #pimp.mepager and it gives me the right mepager object back with all atttributes. But if I try to open '/:pimp_id/mepager' in my webapplication (with an existing pimp that has a mepager linked to it) I get following error
Routing Error
uninitialized constant MepagerController
Did I miss something?
Regards.
Complete error msg:
Started GET "/1/mepager" for 127.0.0.1 at 2014-06-06 08:55:20 +0200
ActionController::RoutingError (uninitialized constant
MepagerController): activesupport (4.0.0)
lib/active_support/inflector/methods.rb:226:in const_get'
activesupport (4.0.0) lib/active_support/inflector/methods.rb:226:in
block in constantize' activesupport (4.0.0)
lib/active_support/inflector/methods.rb:224:in each' activesupport
(4.0.0) lib/active_support/inflector/methods.rb:224:ininject'
activesupport (4.0.0) lib/active_support/inflector/methods.rb:224:in
constantize' actionpack (4.0.0)
lib/action_dispatch/routing/route_set.rb:76:incontroller_reference'
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:66:in
controller' actionpack (4.0.0)
lib/action_dispatch/routing/route_set.rb:44:incall' actionpack
(4.0.0) lib/action_dispatch/journey/router.rb:71:in block in call'
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:ineach'
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:in call'
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:655:in
call' rack (1.5.2) lib/rack/etag.rb:23:in call' rack (1.5.2)
lib/rack/conditionalget.rb:25:incall' rack (1.5.2)
lib/rack/head.rb:11:in call' actionpack (4.0.0)
lib/action_dispatch/middleware/params_parser.rb:27:incall'
actionpack (4.0.0) lib/action_dispatch/middleware/flash.rb:241:in
call' rack (1.5.2) lib/rack/session/abstract/id.rb:225:incontext'
rack (1.5.2) lib/rack/session/abstract/id.rb:220:in call'
actionpack (4.0.0) lib/action_dispatch/middleware/cookies.rb:486:in
call' activerecord (4.0.0) lib/active_record/query_cache.rb:36:in
call' activerecord (4.0.0)
lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in
cal l' activerecord (4.0.0) lib/active_record/migration.rb:369:in
call' actionpack (4.0.0)
lib/action_dispatch/middleware/callbacks.rb:29:inblock in call'
activesupport (4.0.0) lib/active_support/callbacks.rb:373:in
_run__226962734__call__callbacks' activesupport (4.0.0)
lib/active_support/callbacks.rb:80:inrun_callbacks' actionpack
(4.0.0) lib/action_dispatch/middleware/callbacks.rb:27:in call'
actionpack (4.0.0) lib/action_dispatch/middleware/reloader.rb:64:in
call' actionpack (4.0.0)
lib/action_dispatch/middleware/remote_ip.rb:76:in call' actionpack
(4.0.0) lib/action_dispatch/middleware/debug_exceptions.rb:17:in
call' actionpack (4.0.0)
lib/action_dispatch/middleware/show_exceptions.rb:30:in call'
railties (4.0.0) lib/rails/rack/logger.rb:38:incall_app' railties
(4.0.0) lib/rails/rack/logger.rb:21:in block in call' activesupport
(4.0.0) lib/active_support/tagged_logging.rb:67:inblock in tagged'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:25:in
tagged' activesupport (4.0.0)
lib/active_support/tagged_logging.rb:67:intagged' railties (4.0.0)
lib/rails/rack/logger.rb:21:in call' actionpack (4.0.0)
lib/action_dispatch/middleware/request_id.rb:21:incall' rack
(1.5.2) lib/rack/methodoverride.rb:21:in call' rack (1.5.2)
lib/rack/runtime.rb:17:incall' activesupport (4.0.0)
lib/active_support/cache/strategy/local_cache.rb:83:in call' rack
(1.5.2) lib/rack/lock.rb:17:incall' actionpack (4.0.0)
lib/action_dispatch/middleware/static.rb:64:in call' railties
(4.0.0) lib/rails/engine.rb:511:incall' railties (4.0.0)
lib/rails/application.rb:97:in call' rack (1.5.2)
lib/rack/lock.rb:17:incall' rack (1.5.2)
lib/rack/content_length.rb:14:in call' rack (1.5.2)
lib/rack/handler/webrick.rb:60:inservice'
C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:138:in
service'
C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:94:in
run'
C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:in
`block in start_thread'
Rendered
C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-4.0.0/lib/action_dispatch
/middleware/templates/rescues/_trace.erb (1.0ms) Rendered
C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-4.0.0/lib/action_dispatch
/middleware/templates/routes/_route.html.erb (1.0ms) Rendered
C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-4.0.0/lib/action_dispatch
/middleware/templates/routes/_table.html.erb (1.0ms) Rendered
C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-4.0.0/lib/action_dispatch
/middleware/templates/rescues/routing_error.erb within rescues/layout
(42.0ms)
Console test
> irb(main):001:0> Pimp.first.mepager ←[1m←[36mSQL (0.0ms)←[0m
> ←[1mUSE [rails_confreport_develop]←[0m ←[1m←[35mPimp Load
> (1.0ms)←[0m EXEC sp_executesql N'SELECT TOP (1) [pimps].* Y
> [pimps].[id] ASC' ←[1m←[36mMepager Load (1.0ms)←[0m ←[1mEXEC
> sp_executesql N'SELECT TOP (1) [me gers] WHERE [mepagers].[pimp_id] =
> #0 ORDER BY [mepagers].[id] ASC', N'#0 int', id", 2]]
> => #<Mepager id: 2, pimp_id: 2, pre: "geqgewqrgq", post: "egewqewqgewqgewq", com .0, save_c: nil, save_other: "", save_otherv:
> nil, affect_design: "", affect_str "", affect_other: "", affect_dno:
> "", affect_mid: "", affect_otherdoc: "", owner ence: "", created_at:
> "2014-06-06 06:36:44", updated_at: "2014-06-06 06:36:44">
mepagers_controller.rb
class MepagersController < ApplicationController
before_action :set_mepager, only: [:show, :edit, :update, :destroy]
before_action :set_pimp
# GET /mepagers
# GET /mepagers.json
#def index
##mepagers = Mepager.all
#end
# GET /mepagers/1
# GET /mepagers/1.json
def show
#mepager = #pimp.mepager
end
# GET /mepagers/new
def new
#mepager = #pimp.build_mepager
end
# GET /mepagers/1/edit
def edit
#mepager = #pimp.mepager
end
# POST /mepagers
# POST /mepagers.json
def create
#mepager = #pimp.build_mepager(mepager_params)
respond_to do |format|
if #mepager.save
format.html { redirect_to [#pimp,#mepager], notice: 'Mepager was successfully created.' }
format.json { render action: 'show', status: :created, location: #mepager }
else
format.html { render action: 'new' }
format.json { render json: #mepager.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /mepagers/1
# PATCH/PUT /mepagers/1.json
def update
#mepager = #pimp.mepager
respond_to do |format|
if #mepager.update(mepager_params)
format.html { redirect_to [#pimp,#mepager], notice: 'Mepager was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: #mepager.errors, status: :unprocessable_entity }
end
end
end
# DELETE /mepagers/1
# DELETE /mepagers/1.json
def destroy
#mepager = #pimp.mepager
#mepager.destroy
respond_to do |format|
format.html { redirect_to mepagers_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_mepager
#mepager = Mepager.find(params[:id])
end
def set_pimp
#pimp = Pimp.find(params[:pimp_id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def mepager_params
params.require(:mepager).permit(:pimp_id, :pre, :post, :comment, :save_h, :save_c, :save_other, :save_otherv, :affect_design, :affect_stress, :affect_me, :affect_other, :affect_dno, :affect_mid, :affect_otherdoc, :owner, :pps, :reference)
end
end
You have written get '/:pimp_id/mepager', :to => 'mepager#show', :as => 'mepager' but it should be get '/:pimp_id/mepager', :to => 'mepagers#show', :as => 'mepager'. You forgot to add "s" in your "mepages#show". For more information refer to here.
One more thing since your mepager is nested inside pimp you don't need your :set_mepager filter. You can either remove it or do something like this inside your mepagers_controller.rb
class MepagersController < ApplicationController
before_action :set_pimp
before_action :set_mepager, only: [:show, :edit, :update, :destroy]
# your actions
private
# Use callbacks to share common setup or constraints between actions.
def set_mepager
#mepager = #pimp.mepager
end
def set_pimp
#pimp = Pimp.find(params[:pimp_id])
end
end
You need to modify your routes this way:
root :to => 'pimps#index'
get '/:pimp_id/mepager', :to => 'mepagers#show', :as => 'mepager'
Rails infers the controller name from the :to keyword. The notation mepagers#show means the show method of MepagersController
Source: http://edgeguides.rubyonrails.org/routing.html#connecting-urls-to-code
Related
I am trying to add a custom Photo model to a spree store admin panel and when I try to go to the page I am getting an error: uninitialized constant Admin. I have a feeling it has to do with either how I am naming my files or where I am putting them. This is what I have so far:
Routes
namespace :admin do
resources :photos
end
My view files are all located in: app/views/spree/admin/photos
app/controllers/admin/photos_controller.rb
module Admin
class PhotosController < Admin::BaseController
before_action :set_photo, only: [:show, :edit, :update, :destroy]
# GET /photos
# GET /photos.json
def index
#photos = Photo.all
end
# GET /photos/1
# GET /photos/1.json
def show
end
# GET /photos/new
def new
#photo = Photo.new
end
# GET /photos/1/edit
def edit
end
# POST /photos
# POST /photos.json
def create
#photo = Photo.new(photo_params)
respond_to do |format|
if #photo.save
format.html { redirect_to #photo, notice: 'Photo was successfully created.' }
format.json { render :show, status: :created, location: #photo }
else
format.html { render :new }
format.json { render json: #photo.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /photos/1
# PATCH/PUT /photos/1.json
def update
respond_to do |format|
if #photo.update(photo_params)
format.html { redirect_to #photo, notice: 'Photo was successfully updated.' }
format.json { render :show, status: :ok, location: #photo }
else
format.html { render :edit }
format.json { render json: #photo.errors, status: :unprocessable_entity }
end
end
end
# DELETE /photos/1
# DELETE /photos/1.json
def destroy
#photo.destroy
respond_to do |format|
format.html { redirect_to photos_url, notice: 'Photo was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_photo
#photo = Photo.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def photo_params
params.require(:photo).permit(:image, :book_id)
end
end
end
Here is the full error:
Started GET "/admin/photos" for 207.93.212.56 at 2017-04-13 19:18:41 +0000
Cannot render console from 207.93.212.56! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
ActionController::RoutingError (uninitialized constant Admin):
activesupport (4.2.6) lib/active_support/inflector/methods.rb:261:in `const_get'
activesupport (4.2.6) lib/active_support/inflector/methods.rb:261:in `block in constantize'
activesupport (4.2.6) lib/active_support/inflector/methods.rb:259:in `each'
activesupport (4.2.6) lib/active_support/inflector/methods.rb:259:in `inject'
activesupport (4.2.6) lib/active_support/inflector/methods.rb:259:in `constantize'
actionpack (4.2.6) lib/action_dispatch/routing/route_set.rb:70:in `controller_reference'
actionpack (4.2.6) lib/action_dispatch/routing/route_set.rb:60:in `controller'
actionpack (4.2.6) lib/action_dispatch/routing/route_set.rb:39:in `serve'
actionpack (4.2.6) lib/action_dispatch/journey/router.rb:43:in `block in serve'
actionpack (4.2.6) lib/action_dispatch/journey/router.rb:30:in `each'
actionpack (4.2.6) lib/action_dispatch/journey/router.rb:30:in `serve'
actionpack (4.2.6) lib/action_dispatch/routing/route_set.rb:817:in `call'
warden (1.2.7) lib/warden/manager.rb:36:in `block in call'
warden (1.2.7) lib/warden/manager.rb:35:in `catch'
warden (1.2.7) lib/warden/manager.rb:35:in `call'
rack (1.6.5) lib/rack/etag.rb:24:in `call'
rack (1.6.5) lib/rack/conditionalget.rb:25:in `call'
rack (1.6.5) lib/rack/head.rb:13:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/flash.rb:260:in `call'
rack (1.6.5) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.6.5) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/cookies.rb:560:in `call'
activerecord (4.2.6) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.2.6) lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in `call'
activerecord (4.2.6) lib/active_record/migration.rb:377:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.2.6) lib/active_support/callbacks.rb:88:in `__run_callbacks__'
activesupport (4.2.6) lib/active_support/callbacks.rb:778:in `_run_call_callbacks'
activesupport (4.2.6) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (4.2.6) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/reloader.rb:73:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
web-console (2.3.0) lib/web_console/middleware.rb:20:in `block in call'
web-console (2.3.0) lib/web_console/middleware.rb:18:in `catch'
web-console (2.3.0) lib/web_console/middleware.rb:18:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.2.6) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.2.6) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.2.6) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.2.6) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.2.6) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.2.6) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.6.5) lib/rack/methodoverride.rb:22:in `call'
rack (1.6.5) lib/rack/runtime.rb:18:in `call'
activesupport (4.2.6) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
rack (1.6.5) lib/rack/lock.rb:17:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/static.rb:120:in `call'
rack (1.6.5) lib/rack/sendfile.rb:113:in `call'
railties (4.2.6) lib/rails/engine.rb:518:in `call'
railties (4.2.6) lib/rails/application.rb:165:in `call'
rack (1.6.5) lib/rack/lock.rb:17:in `call'
rack (1.6.5) lib/rack/content_length.rb:15:in `call'
rack (1.6.5) lib/rack/handler/webrick.rb:88:in `service'
/usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/webrick/httpserver.rb:140:in `service'
/usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/webrick/httpserver.rb:96:in `run'
/usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/webrick/server.rb:296:in `block in start_thread'
Well, you need to use proper module scoping.This code snippet will help you out.
module Spree
module Admin
class PhotosController < BaseController
before_action :set_photo, only: [:show, :edit, :update, :destroy]
# GET /photos
# GET /photos.json
def index
#photos = Photo.all
end
# GET /photos/1
# GET /photos/1.json
def show
end
# GET /photos/new
def new
#photo = Photo.new
end
# GET /photos/1/edit
def edit
end
# POST /photos
# POST /photos.json
def create
#photo = Photo.new(photo_params)
respond_to do |format|
if #photo.save
format.html { redirect_to #photo, notice: 'Photo was successfully created.' }
format.json { render :show, status: :created, location: #photo }
else
format.html { render :new }
format.json { render json: #photo.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /photos/1
# PATCH/PUT /photos/1.json
def update
respond_to do |format|
if #photo.update(photo_params)
format.html { redirect_to #photo, notice: 'Photo was successfully updated.' }
format.json { render :show, status: :ok, location: #photo }
else
format.html { render :edit }
format.json { render json: #photo.errors, status: :unprocessable_entity }
end
end
end
# DELETE /photos/1
# DELETE /photos/1.json
def destroy
#photo.destroy
respond_to do |format|
format.html { redirect_to photos_url, notice: 'Photo was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_photo
#photo = Photo.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def photo_params
params.require(:photo).permit(:image, :book_id)
end
end
end
end
end
Also, I would recommend you to inherit your class from ResourceController instead of BaseController. By doing so you can save some LOC and it would be really helpful.
You need to use:
class PhotosController < BaseController
Since you are inside admin namespace already
I am trying to include a resource into my routes file that shows the addresses of a customer via the url customers/1/addresses.
This is constructed with the following routes code:
resources :customers do
resources :addresses
end
However when I access the URL customers/1/addresses I'm thrown an exception
Couldn't find Customer with 'id'=
This error is caused by the following:
def set_customer
#customer = Customer.find(params[:id])
end
Now, this is because before the :show action is run on the customers controller it's calling the set_customer action.
How to only run the set_customer on the /customer/:customer_id: route?
And exclude set_customer on the /customer/:customer_id:/addresses/ route?
EDIT As Requested the Full Stack Trace
activerecord (4.2.1) lib/active_record/core.rb:155:in `find'
app/controllers/customers_controller.rb:67:in `set_customer'
activesupport (4.2.1) lib/active_support/callbacks.rb:432:in `block in make_lambda'
activesupport (4.2.1) lib/active_support/callbacks.rb:145:in `call'
activesupport (4.2.1) lib/active_support/callbacks.rb:145:in `block in halting_and_conditional'
activesupport (4.2.1) lib/active_support/callbacks.rb:504:in `call'
activesupport (4.2.1) lib/active_support/callbacks.rb:504:in `block in call'
activesupport (4.2.1) lib/active_support/callbacks.rb:504:in `each'
activesupport (4.2.1) lib/active_support/callbacks.rb:504:in `call'
activesupport (4.2.1) lib/active_support/callbacks.rb:92:in `_run_callbacks'
activesupport (4.2.1) lib/active_support/callbacks.rb:776:in `_run_process_action_callbacks'
activesupport (4.2.1) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (4.2.1) lib/abstract_controller/callbacks.rb:19:in `process_action'
actionpack (4.2.1) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (4.2.1) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
activesupport (4.2.1) lib/active_support/notifications.rb:164:in `block in instrument'
activesupport (4.2.1) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.2.1) lib/active_support/notifications.rb:164:in `instrument'
actionpack (4.2.1) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (4.2.1) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
activerecord (4.2.1) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (4.2.1) lib/abstract_controller/base.rb:137:in `process'
actionview (4.2.1) lib/action_view/rendering.rb:30:in `process'
actionpack (4.2.1) lib/action_controller/metal.rb:196:in `dispatch'
actionpack (4.2.1) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
actionpack (4.2.1) lib/action_controller/metal.rb:237:in `block in action'
actionpack (4.2.1) lib/action_dispatch/routing/route_set.rb:74:in `call'
actionpack (4.2.1) lib/action_dispatch/routing/route_set.rb:74:in `dispatch'
actionpack (4.2.1) lib/action_dispatch/routing/route_set.rb:43:in `serve'
actionpack (4.2.1) lib/action_dispatch/journey/router.rb:43:in `block in serve'
actionpack (4.2.1) lib/action_dispatch/journey/router.rb:30:in `each'
actionpack (4.2.1) lib/action_dispatch/journey/router.rb:30:in `serve'
actionpack (4.2.1) lib/action_dispatch/routing/route_set.rb:819:in `call'
rack (1.6.4) lib/rack/etag.rb:24:in `call'
rack (1.6.4) lib/rack/conditionalget.rb:25:in `call'
rack (1.6.4) lib/rack/head.rb:13:in `call'
actionpack (4.2.1) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
actionpack (4.2.1) lib/action_dispatch/middleware/flash.rb:260:in `call'
rack (1.6.4) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.6.4) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.2.1) lib/action_dispatch/middleware/cookies.rb:560:in `call'
activerecord (4.2.1) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:649:in `call'
activerecord (4.2.1) lib/active_record/migration.rb:378:in `call'
actionpack (4.2.1) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.2.1) lib/active_support/callbacks.rb:88:in `call'
activesupport (4.2.1) lib/active_support/callbacks.rb:88:in `_run_callbacks'
activesupport (4.2.1) lib/active_support/callbacks.rb:776:in `_run_call_callbacks'
activesupport (4.2.1) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (4.2.1) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.2.1) lib/action_dispatch/middleware/reloader.rb:73:in `call'
actionpack (4.2.1) lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
actionpack (4.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
web-console (2.1.3) lib/web_console/middleware.rb:37:in `call'
actionpack (4.2.1) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.2.1) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.2.1) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.2.1) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.2.1) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.2.1) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.2.1) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.2.1) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.6.4) lib/rack/methodoverride.rb:22:in `call'
rack (1.6.4) lib/rack/runtime.rb:18:in `call'
activesupport (4.2.1) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
rack (1.6.4) lib/rack/lock.rb:17:in `call'
actionpack (4.2.1) lib/action_dispatch/middleware/static.rb:113:in `call'
rack (1.6.4) lib/rack/sendfile.rb:113:in `call'
railties (4.2.1) lib/rails/engine.rb:518:in `call'
railties (4.2.1) lib/rails/application.rb:164:in `call'
rack (1.6.4) lib/rack/lock.rb:17:in `call'
rack (1.6.4) lib/rack/content_length.rb:15:in `call'
rack (1.6.4) lib/rack/handler/webrick.rb:88:in `service'
/Users/xavier/.rbenv/versions/2.2.0/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service'
/Users/xavier/.rbenv/versions/2.2.0/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run'
/Users/xavier/.rbenv/versions/2.2.0/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'
EDIT customers_controller.rb
class CustomersController < ApplicationController
before_action :set_customer, only: [:show, :edit, :update, :destroy]
# GET /customers
# GET /customers.json
def index
#customers = Customer.all
end
# GET /customers/1
# GET /customers/1.json
def show
end
# GET /customers/new
def new
#customer = Customer.new
end
# GET /customers/1/edit
def edit
end
# POST /customers
# POST /customers.json
def create
#customer = Customer.new(customer_params)
respond_to do |format|
if #customer.save
format.html { redirect_to #customer, notice: 'Customer was successfully created.' }
format.json { render :show, status: :created, location: #customer }
else
format.html { render :new }
format.json { render json: #customer.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /customers/1
# PATCH/PUT /customers/1.json
def update
respond_to do |format|
if #customer.update(customer_params)
format.html { redirect_to #customer, notice: 'Customer was successfully updated.' }
format.json { render :show, status: :ok, location: #customer }
else
format.html { render :edit }
format.json { render json: #customer.errors, status: :unprocessable_entity }
end
end
end
# DELETE /customers/1
# DELETE /customers/1.json
def destroy
#customer.destroy
respond_to do |format|
format.html { redirect_to customers_url, notice: 'Customer was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_customer
#customer = Customer.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def customer_params
params.require(:customer).permit(:first_name, :middle_name, :last_name, :cyrillic_first_name, :cyrillic_middle_name, :cyrillic_last_name, :email_address, :hashed_password, allergen_ids: [])
end
end
Edit Addresses Controller
class AddressesController < ApplicationController
before_action :set_address, only: [:show, :edit, :update, :destroy]
# GET /addresses
# GET /addresses.json
def index
#addresses = Address.all
end
# GET /addresses/1
# GET /addresses/1.json
def show
end
# GET /addresses/new
def new
#address = Address.new
end
# GET /addresses/1/edit
def edit
end
# POST /addresses
# POST /addresses.json
def create
#address = Address.new(address_params)
respond_to do |format|
if #address.save
format.html { redirect_to #address, notice: 'Address was successfully created.' }
format.json { render :show, status: :created, location: #address }
else
format.html { render :new }
format.json { render json: #address.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /addresses/1
# PATCH/PUT /addresses/1.json
def update
respond_to do |format|
if #address.update(address_params)
format.html { redirect_to #address, notice: 'Address was successfully updated.' }
format.json { render :show, status: :ok, location: #address }
else
format.html { render :edit }
format.json { render json: #address.errors, status: :unprocessable_entity }
end
end
end
# DELETE /addresses/1
# DELETE /addresses/1.json
def destroy
#address.destroy
respond_to do |format|
format.html { redirect_to addresses_url, notice: 'Address was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_address
#address = Address.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def address_params
params[:address]
end
end
When you access a /customers/:id path, set_customer can do its job with params[:id], but at /customers/:customer_id/addresses, any :id is the Address ID. I'm not sure why set_customer is running at all given the code you've posted so far, but updating it to
Customer.find(params[:customer_id] || params[:id])
will let it work for both situations.
How to only run the set_customer on the /customer/:customer_id: route?
/customers/:customer_id: How's it possible? You are only gonna get customer_id if it is followed by addresses/:id like:
/customers/:customer_id/addresses/
/customers/:customer_id/addresses/new
/customers/:customer_id/addresses/:id/edit
And that actually corresponds the the show action in AddressesController.
And exclude set_customer on the /customer/:customer_id:/addresses/ route?
/customers/:customer_id/:addresses corresponds to index action in AddressesController, and there you can exclude set_customer for index action.
I am a noob. After an exhaustive search of other questions, I was unable to find similar posts with clear and correct answers.
First, let me explain that my app has nested associations as follows:
User has one customer
Customer has many accounts
User has many accounts through customer
So far, I've created a user with Devise, and then manually assigned her to a customer object in the console. Also created a corresponding Account in the console. (Haven't worked out the form yet for the nested creation).
All I want to do right now is bring the user, once logged in, to a "landing" page which shows her a listing of her accounts. It sounds pretty simple, but I get the following error:
ActionController::UnknownFormat in AccountsController#index
The code referenced by the error...
#accounts = #user.accounts
respond_to do |format|
format.html # index.html.erb
format.json { render json: #account }
end
Here is the whole method in the Accounts Controller...
def index
#user = current_user
#accounts = #user.accounts
respond_to do |format|
format.html # index.html.erb
format.json { render json: #account }
end
end
I don't understand what's causing the error. Here is the view code for the Accounts index...
<h1>Listing accounts</h1>
<table id="indexTable" class="table table-striped">
<thead>
<tr>
<th colspan="5"></th>
</tr>
</thead>
<tbody>
<% if Account.exists? %>
<% for account in #accounts do %>
<tr>
<td><%= account.id %></td>
<td><%= %></td>
<td><%= link_to 'Show', account %></td>
<td><%= link_to 'Edit', edit_account_path(account) %></td>
<td><%= link_to 'Destroy', account, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
<% else %>
<div class="jumbotron" style="text-align: center; border: 1px solid #DDD; border-radius: 8px;">
<h1>No accounts to display</h1>
</div>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New Account', new_account_path %>
I admit, the view itself may have its own issues. But it's not even getting to the view. The error points to the controller, but could it be a problem with routing? This is what routes.rb looks like...
Rails.application.routes.draw do
devise_for :users, :controllers => { :registrations => "registrations" }
devise_scope :user do
post "/accounts/adminview" => "devise/sessions#new"
end
...
root 'home#index'
...
resources :accounts do
member do
get :adminview
end
end
resources :account_types, :accounts, :administrators, :customers, :transaction_types, :transactions, :users
...
end
It seems like there should be a simple solution for this, but I am a noob. Can anyone help me understand what to do? How do I get rid of this error and take my user to a listing of her accounts?
Thank you
I'm using Rails 4.1.8
UPDATE
As requested, here is the whole stack trace...
actionpack (4.1.8) lib/action_controller/metal/mime_responds.rb:440:in `retrieve_collector_from_mimes'
actionpack (4.1.8) lib/action_controller/metal/mime_responds.rb:256:in `respond_to'
app/controllers/accounts_controller.rb:11:in `index'
actionpack (4.1.8) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (4.1.8) lib/abstract_controller/base.rb:189:in `process_action'
actionpack (4.1.8) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (4.1.8) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
activesupport (4.1.8) lib/active_support/callbacks.rb:113:in `call'
activesupport (4.1.8) lib/active_support/callbacks.rb:113:in `call'
activesupport (4.1.8) lib/active_support/callbacks.rb:149:in `block in halting_and_conditional'
activesupport (4.1.8) lib/active_support/callbacks.rb:166:in `call'
activesupport (4.1.8) lib/active_support/callbacks.rb:166:in `block in halting'
activesupport (4.1.8) lib/active_support/callbacks.rb:149:in `call'
activesupport (4.1.8) lib/active_support/callbacks.rb:149:in `block in halting_and_conditional'
activesupport (4.1.8) lib/active_support/callbacks.rb:229:in `call'
activesupport (4.1.8) lib/active_support/callbacks.rb:229:in `block in halting'
activesupport (4.1.8) lib/active_support/callbacks.rb:229:in `call'
activesupport (4.1.8) lib/active_support/callbacks.rb:229:in `block in halting'
activesupport (4.1.8) lib/active_support/callbacks.rb:166:in `call'
activesupport (4.1.8) lib/active_support/callbacks.rb:166:in `block in halting'
activesupport (4.1.8) lib/active_support/callbacks.rb:166:in `call'
activesupport (4.1.8) lib/active_support/callbacks.rb:166:in `block in halting'
activesupport (4.1.8) lib/active_support/callbacks.rb:166:in `call'
activesupport (4.1.8) lib/active_support/callbacks.rb:166:in `block in halting'
activesupport (4.1.8) lib/active_support/callbacks.rb:86:in `call'
activesupport (4.1.8) lib/active_support/callbacks.rb:86:in `run_callbacks'
actionpack (4.1.8) lib/abstract_controller/callbacks.rb:19:in `process_action'
actionpack (4.1.8) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (4.1.8) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
activesupport (4.1.8) lib/active_support/notifications.rb:159:in `block in instrument'
activesupport (4.1.8) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.1.8) lib/active_support/notifications.rb:159:in `instrument'
actionpack (4.1.8) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (4.1.8) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
activerecord (4.1.8) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (4.1.8) lib/abstract_controller/base.rb:136:in `process'
actionview (4.1.8) lib/action_view/rendering.rb:30:in `process'
actionpack (4.1.8) lib/action_controller/metal.rb:196:in `dispatch'
actionpack (4.1.8) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
actionpack (4.1.8) lib/action_controller/metal.rb:232:in `block in action'
actionpack (4.1.8) lib/action_dispatch/routing/route_set.rb:82:in `call'
actionpack (4.1.8) lib/action_dispatch/routing/route_set.rb:82:in `dispatch'
actionpack (4.1.8) lib/action_dispatch/routing/route_set.rb:50:in `call'
actionpack (4.1.8) lib/action_dispatch/journey/router.rb:73:in `block in call'
actionpack (4.1.8) lib/action_dispatch/journey/router.rb:59:in `each'
actionpack (4.1.8) lib/action_dispatch/journey/router.rb:59:in `call'
actionpack (4.1.8) lib/action_dispatch/routing/route_set.rb:678:in `call'
warden (1.2.3) lib/warden/manager.rb:35:in `block in call'
warden (1.2.3) lib/warden/manager.rb:34:in `catch'
warden (1.2.3) lib/warden/manager.rb:34:in `call'
rack (1.5.2) lib/rack/etag.rb:23:in `call'
rack (1.5.2) lib/rack/conditionalget.rb:25:in `call'
rack (1.5.2) lib/rack/head.rb:11:in `call'
actionpack (4.1.8) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
ctionpack (4.1.8) 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.8) lib/action_dispatch/middleware/cookies.rb:560:in `call'
activerecord (4.1.8) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.1.8) lib/active_record/connection_adapters/abstract/connection_pool.rb:621:in `call'
activerecord (4.1.8) lib/active_record/migration.rb:380:in `call'
actionpack (4.1.8) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.1.8) lib/active_support/callbacks.rb:82:in `run_callbacks'
actionpack (4.1.8) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.1.8) lib/action_dispatch/middleware/reloader.rb:73:in `call'
actionpack (4.1.8) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
actionpack (4.1.8) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
actionpack (4.1.8) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.1.8) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.1.8) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.1.8) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.1.8) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.1.8) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.1.8) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.1.8) 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.8) 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.8) lib/action_dispatch/middleware/static.rb:84:in `call'
rack (1.5.2) lib/rack/sendfile.rb:112:in `call'
railties (4.1.8) lib/rails/engine.rb:514:in `call'
railties (4.1.8) lib/rails/application.rb:144:in `call'
rack (1.5.2) lib/rack/content_length.rb:14:in `call'
puma (2.11.1) lib/puma/server.rb:507:in `handle_request'
puma (2.11.1) lib/puma/server.rb:375:in `process_client'
puma (2.11.1) lib/puma/server.rb:262:in `block in run'
puma (2.11.1) lib/puma/thread_pool.rb:104:in `call'
puma (2.11.1) lib/puma/thread_pool.rb:104:in `block in spawn_thread'
UPDATE
As requested, the full Accounts controller...
class AccountsController < ApplicationController
before_filter :authenticate_user!
before_action :set_account, only: [:show, :edit, :update, :destroy]
# GET /accounts
# GET /accounts.json
def index
#user = current_user
#accounts = #user.accounts
respond_to do |format|
format.html # index.html.erb
format.json { render json: #accounts }
end
end
def adminview
#accounts = Account.all
respond_to do |format|
format.html # adminview.html.erb
format.json { render json: #accounts }
end
end
# GET /accounts/1
# GET /accounts/1.json
def show
end
# GET /accounts/new
def new
#user = User.find(params[:user_id])
#customer = #user.customer.build
#account = #customer.accounts.build
respond_to do |format|
format.html # new.html.erb
format.json { render json: #account }
end
end
# GET /accounts/1/edit
def edit
end
# POST /accounts
# POST /accounts.json
def create
#account = Account.new(account_params)
respond_to do |format|
if #account.save
format.html { redirect_to #account, notice: 'Account was successfully created.' }
format.json { render :show, status: :created, location: #account }
else
format.html { render :new }
format.json { render json: #account.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /accounts/1
# PATCH/PUT /accounts/1.json
def update
respond_to do |format|
if #account.update(account_params)
format.html { redirect_to #account, notice: 'Account was successfully updated.' }
format.json { render :show, status: :ok, location: #account }
else
format.html { render :edit }
format.json { render json: #account.errors, status: :unprocessable_entity }
end
end
end
# DELETE /accounts/1
# DELETE /accounts/1.json
def destroy
#account.destroy
respond_to do |format|
format.html { redirect_to accounts_url, notice: 'Account was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_account
#account = Account.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def account_params
params[:account]
end
end
UPDATE
As requested, the logs just before the error (starting at sign in)...
Started GET "/users/sign_in" for 127.0.0.1 at 2015-03-07 12:28:50 -0500
Processing by Devise::SessionsController#new as HTML
Rendered devise/shared/_links.html.erb (0.5ms)
Rendered devise/sessions/new.html.erb within layouts/application (3.5ms)
Rendered application/_navigation.html.erb (0.5ms)
Completed 200 OK in 166ms (Views: 163.0ms | ActiveRecord: 0.0ms)
Started POST "/users/sign_in" for 127.0.0.1 at 2015-03-07 12:28:54 -0500
Processing by Devise::SessionsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"7Eoj56l0rRcheddj2tSE9sSm+5wXi7/bxVVFsPga+XM=", "user"=>{"login"=>"charlie", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
User Load (0.9ms) SELECT `users`.* FROM `users` WHERE (lower(username) = 'charlie' OR lower(email) = 'charlie') ORDER BY `users`.`id` ASC LIMIT 1
(0.2ms) BEGIN
SQL (0.5ms) UPDATE `users` SET `current_sign_in_at` = '2015-03-07 17:28:54', `last_sign_in_at` = '2015-03-07 17:27:42', `sign_in_count` = 17 WHERE `users`.`id` = x'ac045b738f9c446f9cc2d86b01cea3b7'
(94.7ms) COMMIT
Redirected to http://localhost:3000/accounts.ac045b73-8f9c-446f-9cc2-d86b01cea3b7
Completed 302 Found in 187ms (ActiveRecord: 96.2ms)
Started GET "/accounts.ac045b73-8f9c-446f-9cc2-d86b01cea3b7" for 127.0.0.1 at 2015-03-07 12:28:54 -0500
Processing by AccountsController#index as
User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = x'ac045b738f9c446f9cc2d86b01cea3b7' ORDER BY `users`.`id` ASC LIMIT 1
Completed 406 Not Acceptable in 6ms
ActionController::UnknownFormat (ActionController::UnknownFormat):
app/controllers/accounts_controller.rb:11:in `index'
Rendered /home/barnabas/.rvm/gems/ruby-2.1.5/gems/actionpack-4.1.8/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.9ms)
Rendered /home/barnabas/.rvm/gems/ruby-2.1.5/gems/actionpack-4.1.8/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (1.4ms)
Rendered /home/barnabas/.rvm/gems/ruby-2.1.5/gems/actionpack-4.1.8/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.1ms)
Rendered /home/barnabas/.rvm/gems/ruby-2.1.5/gems/actionpack-4.1.8/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (14.3ms)
For /accounts.ac045b73-8f9c-446f-9cc2-d86b01cea3b7 your app is taking as format ac045b73-8f9c-446f-9cc2-d86b01cea3b7 but your controller only knows how to handle html and json.
You should verify why /users/sign_in is redirecting to that weird link
The only error I can see is that in your controller, this:
format.json { render json: #account }
should be
format.json { render json: #accounts }
Notice the extra 's' on #accounts. But that may not be all of it. If it is, great! If not can yo post your full Accounts controller and stack trace so we can work through this?
I have a large number of mostly static pages which I've put into a database. I'm trying to retrieve these and dynamically generate a URL (similar to this: http://railscasts.com/episodes/117-semi-static-pages-revised. My model:
class Page < ActiveRecord::Base
validates_uniqueness_of :permalink
def to_param
permalink
end
end
Pages Controller:
class PagesController < ApplicationController
before_action :set_page, only: [:show, :edit, :update, :destroy]
# GET /pages
# GET /pages.json
def index
#pages = Page.all
end
# GET /pages/1
# GET /pages/1.json
def show
#page = Page.find_by_permalink!(params[:id])
end
# GET /pages/new
def new
#page = Page.new
end
# GET /pages/1/edit
def edit
#page = Page.find_by_permalink!(params[:id])
end
# POST /pages
# POST /pages.json
def create
#page = Page.new(page_params)
respond_to do |format|
if #page.save
format.html { redirect_to #page, notice: 'Page was successfully created.' }
format.json { render :show, status: :created, location: #page }
else
format.html { render :new }
format.json { render json: #page.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /pages/1
# PATCH/PUT /pages/1.json
def update
respond_to do |format|
if #page.update(page_params)
format.html { redirect_to #page, notice: 'Page was successfully updated.' }
format.json { render :show, status: :ok, location: #page }
else
format.html { render :edit }
format.json { render json: #page.errors, status: :unprocessable_entity }
end
end
end
# DELETE /pages/1
# DELETE /pages/1.json
def destroy
#page.destroy
respond_to do |format|
format.html { redirect_to pages_url, notice: 'Page was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_page
#page = Page.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def page_params
params.require(:page).permit(:name, :permalink, :content)
end
end
Routes:
resources :pages, except: :show
resources :products
root to: 'products#index'
get ':id', to: 'pages#show', as: :page
I know there have been some updates on the way that rails generates scaffolds but I just can;t work out what needs to change to make this work? I'm getting errors thrown up both the routes, but was previously getting an error with #page = Page.find_by_permalink!(params[:id])as well. It was saying that the method was missing but I couldn't see how. I also know I could use something like refinerycms but I really want to try and learn this stuff so any help much appreciated!
ERRORS FROM ROUTES:
Invalid route name, already in use: 'page' You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with `resources` as explained here: http://guides.rubyonrails.org/routing.html#restricting-the-routes-created
FULL TRACE:
ctionpack (4.1.5) lib/action_dispatch/routing/route_set.rb:430:in `add_route'
actionpack (4.1.5) lib/action_dispatch/routing/mapper.rb:1489:in `add_route'
actionpack (4.1.5) lib/action_dispatch/routing/mapper.rb:1466:in `decomposed_match'
actionpack (4.1.5) lib/action_dispatch/routing/mapper.rb:1447:in `block in match'
actionpack (4.1.5) lib/action_dispatch/routing/mapper.rb:1437:in `each'
actionpack (4.1.5) lib/action_dispatch/routing/mapper.rb:1437:in `match'
actionpack (4.1.5) lib/action_dispatch/routing/mapper.rb:630:in `map_method'
actionpack (4.1.5) lib/action_dispatch/routing/mapper.rb:591:in `get'
config/routes.rb:5:in `block in <top (required)>'
actionpack (4.1.5) lib/action_dispatch/routing/route_set.rb:337:in `instance_exec'
actionpack (4.1.5) lib/action_dispatch/routing/route_set.rb:337:in `eval_block'
actionpack (4.1.5) lib/action_dispatch/routing/route_set.rb:315:in `draw'
config/routes.rb:1:in `<top (required)>'
activesupport (4.1.5) lib/active_support/dependencies.rb:241:in `load'
activesupport (4.1.5) lib/active_support/dependencies.rb:241:in `block in load'
activesupport (4.1.5) lib/active_support/dependencies.rb:232:in `load_dependency'
activesupport (4.1.5) lib/active_support/dependencies.rb:241:in `load'
railties (4.1.5) lib/rails/application/routes_reloader.rb:40:in `block in load_paths'
railties (4.1.5) lib/rails/application/routes_reloader.rb:40:in `each'
railties (4.1.5) lib/rails/application/routes_reloader.rb:40:in `load_paths'
railties (4.1.5) lib/rails/application/routes_reloader.rb:16:in `reload!'
railties (4.1.5) lib/rails/application/routes_reloader.rb:26:in `block in updater'
activesupport (4.1.5) lib/active_support/file_update_checker.rb:75:in `call'
activesupport (4.1.5) lib/active_support/file_update_checker.rb:75:in `execute'
railties (4.1.5) lib/rails/application/routes_reloader.rb:7:in `execute'
railties (4.1.5) lib/rails/application/finisher.rb:83:in `block (2 levels) in <module:Finisher>'
activesupport (4.1.5) lib/active_support/callbacks.rb:438:in `instance_exec'
activesupport (4.1.5) lib/active_support/callbacks.rb:438:in `block in make_lambda'
activesupport (4.1.5) lib/active_support/callbacks.rb:184:in `call'
activesupport (4.1.5) lib/active_support/callbacks.rb:184:in `block in simple'
activesupport (4.1.5) lib/active_support/callbacks.rb:185:in `call'
activesupport (4.1.5) lib/active_support/callbacks.rb:185:in `block in simple'
activesupport (4.1.5) lib/active_support/callbacks.rb:185:in `call'
activesupport (4.1.5) lib/active_support/callbacks.rb:185:in `block in simple'
activesupport (4.1.5) lib/active_support/callbacks.rb:86:in `call'
activesupport (4.1.5) lib/active_support/callbacks.rb:86:in `run_callbacks'
actionpack (4.1.5) lib/action_dispatch/middleware/reloader.rb:83:in `prepare!'
actionpack (4.1.5) lib/action_dispatch/middleware/reloader.rb:71:in `call'
actionpack (4.1.5) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
actionpack (4.1.5) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
actionpack (4.1.5) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.1.5) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.1.5) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.1.5) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.1.5) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.1.5) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.1.5) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.1.5) 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.5) 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.5) lib/action_dispatch/middleware/static.rb:64:in `call'
rack (1.5.2) lib/rack/sendfile.rb:112:in `call'
railties (4.1.5) lib/rails/engine.rb:514:in `call'
railties (4.1.5) 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'
/usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/webrick/httpserver.rb:138:in `service'
/usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/webrick/httpserver.rb:94:in `run'
/usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/webrick/server.rb:295:in `block in start_thread'
This error occurred while loading the following files:
/home/ubuntu/workspace/traditional_cleaning/config/routes.rb
I'm integrating acts_as_votable in the elements of one my models, and I'm almost there but I'm facing an issue with some missing route. As far as I have understood from this other question, after upvoting one of my Model elements, the app will be redirected to :post. I have tried to include resources :hack and resources :hacks (which is already present) but it seems not be the solution.
routes.rb
Rails.application.routes.draw do
resources :hacks do
member do
put "like", to: "posts#upvote"
end
end
devise_for :users, :controllers => { omniauth_callbacks: 'omniauth_callbacks' }
match '/profile/:id/finish_signup' => 'users#finish_signup', via: [:get, :patch], :as => :finish_signup
match 'tagged' => 'hacks#tagged', :as => 'tagged', via: 'get'
#To show public profiles
get '/users/:id', :to => "users#show", :as => :user
root "pages#home"
get 'pages/about'
# TheComments routes
concern :user_comments, TheComments::UserRoutes.new
concern :admin_comments, TheComments::AdminRoutes.new
resources :comments, concerns: [:user_comments, :admin_comments]
end
hack show
<p>
<strong>Liked by: </strong>
<%= #hack.liked_by #user %>
<%= link_to "Favorite?", like_hack_path(#hack), method: :put, class: "button tiny" %>
</p>
hacks controller
class HacksController < ApplicationController
before_action :set_hack, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!, except: [:new]
# GET /hacks
# GET /hacks.json
def index
#hacks = Hack.all
end
# GET /hacks/1
# GET /hacks/1.json
def show
#hack = Hack.find params[:id]
#comments = #hack.comments.with_state([:draft, :published])
end
# GET /hacks/new
def new
#hack = current_user.hacks.build
end
# GET /hacks/1/edit
def edit
end
# POST /hacks
# POST /hacks.json
def create
#hack = current_user.hacks.build(hack_params)
respond_to do |format|
if #hack.save
format.html { redirect_to #hack, notice: 'Hack was successfully created.' }
format.json { render :show, status: :created, location: #hack }
else
format.html { render :new }
format.json { render json: #hack.errors, status: :unprocessable_entity }
end
end
end
def upvote
#hack = Hack.find(params[:id])
#hack.liked_by current_user
redirect_to #hack
end
# PATCH/PUT /hacks/1
# PATCH/PUT /hacks/1.json
def update
respond_to do |format|
if #hack.update(hack_params)
format.html { redirect_to #hack, notice: 'Hack was successfully updated.' }
format.json { render :show, status: :ok, location: #hack }
else
format.html { render :edit }
format.json { render json: #hack.errors, status: :unprocessable_entity }
end
end
end
def tagged
if params[:tag].present?
#hacks = Hack.tagged_with(params[:tag])
else
#hacks = Hack.postall
end
end
# DELETE /hacks/1
# DELETE /hacks/1.json
def destroy
#hack.destroy
respond_to do |format|
format.html { redirect_to hacks_url, notice: 'Hack was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_hack
#hack = Hack.find(params[:id])
end
def correct_user
#hack = current_user.hacks.find_by(id: params[:id])
redirect_to hacks_path, notice: "Not authorized to edit this hack" if #hack.nil?
end
# Never trust parameters from the scary internet, only allow the white list through.
def hack_params
params.require(:hack).permit(:description, :image, :url, :tag_list)
end
end
ActionController::RoutingError at /hacks/1/like
uninitialized constant PostsController
Full trace
Started PUT "/hacks/1/like" for 127.0.0.1 at 2014-06-29 12:05:51 +0200
ActionController::RoutingError - uninitialized constant PostsController:
actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:69:in `rescue in controller'
actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:64:in `controller'
actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:44:in `call'
actionpack (4.1.1) lib/action_dispatch/journey/router.rb:71:in `block in call'
actionpack (4.1.1) lib/action_dispatch/journey/router.rb:59:in `call'
actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:676:in `call'
omniauth (1.2.1) lib/omniauth/strategy.rb:186:in `call!'
omniauth (1.2.1) lib/omniauth/strategy.rb:164:in `call'
warden (1.2.3) lib/warden/manager.rb:35:in `block in call'
warden (1.2.3) lib/warden/manager.rb:34: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.1) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
actionpack (4.1.1) 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.1) lib/action_dispatch/middleware/cookies.rb:560:in `call'
activerecord (4.1.1) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.1.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:621:in `call'
activerecord (4.1.1) lib/active_record/migration.rb:380:in `call'
actionpack (4.1.1) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.1.1) lib/active_support/callbacks.rb:82:in `run_callbacks'
actionpack (4.1.1) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.1.1) lib/action_dispatch/middleware/reloader.rb:73:in `call'
actionpack (4.1.1) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
better_errors (1.1.0) lib/better_errors/middleware.rb:84:in `protected_app_call'
better_errors (1.1.0) lib/better_errors/middleware.rb:79:in `better_errors_call'
better_errors (1.1.0) lib/better_errors/middleware.rb:56:in `call'
actionpack (4.1.1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
actionpack (4.1.1) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.1.1) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.1.1) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.1.1) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.1.1) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.1.1) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.1.1) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.1.1) 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.1) 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.1) lib/action_dispatch/middleware/static.rb:64:in `call'
rack (1.5.2) lib/rack/sendfile.rb:112:in `call'
railties (4.1.1) lib/rails/engine.rb:514:in `call'
railties (4.1.1) 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'
() Users/javier/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/webrick/httpserver.rb:138:in `service'
() Users/javier/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/webrick/httpserver.rb:94:in `run'
() Users/javier/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/webrick/server.rb:295:in `block in start_thread'
You don't have a PostsController and from what i see, you want to change this line:
put "like", to: "posts#upvote"
to
put "like", to: "hacks#upvote"
since i believe you want it to point to the HacksController since that's where the upvote action is.