I am stuck in an issue, wherein I would like to send mail after the after_save callback in rails.
Below is my code snippet:
class Response < ActiveRecord::Base
after_create :pending_with
protected
def pending_with
self.approver = self.mapping.user
end
end
class ResponsesController < ApplicationController
def create
#response = current_user.responses.new(response_params)
respond_to do |format|
if #response.save
flash[:notice] = "Response has been saved successfully."
Notification.confirm_approver(#response).deliver
format.html { redirect_to dashboard_home_url }
else
flash[:error] = "There is some problem while saving the responses. Please try again."
format.html { render action: 'new' }
end
end
end
end
class Notification < ApplicationMailer
def confirm_approver(response)
#response = response
p "============"
p #response.approver.email.inspect
end
end
My issue is that, I am not getting approver. Getting error:
undefined method `approver' for nil:NilClass
When I checked the record in the database, apporver ('id') is successfully saved. Am I missing anything here?
BACKTRACE:
app/mailers/notification.rb:11:in `confirm_approver'
vendor/gems/ruby/1.9.1actionpack (4.1.8) lib/abstract_controller/base.rb:189:in `process_action'
vendor/gems/ruby/1.9.1actionpack (4.1.8) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
vendor/gems/ruby/1.9.1activesupport (4.1.8) lib/active_support/callbacks.rb:82:in `run_callbacks'
vendor/gems/ruby/1.9.1actionpack (4.1.8) lib/abstract_controller/callbacks.rb:19:in `process_action'
vendor/gems/ruby/1.9.1actionpack (4.1.8) lib/abstract_controller/base.rb:136:in `process'
vendor/gems/ruby/1.9.1actionview (4.1.8) lib/action_view/rendering.rb:30:in `process'
vendor/gems/ruby/1.9.1actionmailer (4.1.8) lib/action_mailer/base.rb:580:in `block in process'
vendor/gems/ruby/1.9.1activesupport (4.1.8) lib/active_support/notifications.rb:159:in `block in instrument'
vendor/gems/ruby/1.9.1activesupport (4.1.8) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
vendor/gems/ruby/1.9.1activesupport (4.1.8) lib/active_support/notifications.rb:159:in `instrument'
vendor/gems/ruby/1.9.1actionmailer (4.1.8) lib/action_mailer/base.rb:577:in `process'
vendor/gems/ruby/1.9.1actionmailer (4.1.8) lib/action_mailer/base.rb:568:in `initialize'
vendor/gems/ruby/1.9.1actionmailer (4.1.8) lib/action_mailer/base.rb:551:in `new'
vendor/gems/ruby/1.9.1actionmailer (4.1.8) lib/action_mailer/base.rb:551:in `method_missing'
app/controllers/responses_controller.rb:23:in `block in create'
vendor/gems/ruby/1.9.1actionpack (4.1.8) lib/action_controller/metal/mime_responds.rb:433:in `call'
vendor/gems/ruby/1.9.1actionpack (4.1.8) lib/action_controller/metal/mime_responds.rb:433:in `retrieve_collector_from_mimes'
vendor/gems/ruby/1.9.1actionpack (4.1.8) lib/action_controller/metal/mime_responds.rb:256:in `respond_to'
app/controllers/responses_controller.rb:19:in `create'
Hi Based on #zwippie inputs, it worked. Just made little modification to it.
def create
#response = current_user.responses.new(response_params)
respond_to do |format|
if #response.save && #response.reload
Notification.confirm_approver(#response).deliver
flash[:notice] = "Response has been created successfully."
else
format.html { render action: 'new' }
end
end
end
Related
I am writing some tests for one of my controllers, and all of them are passing except the test for my #create method.
I cannot seem to get this test to pass. I understand that the UnknownFormat error is related to which format I am using (and the respond_to) to post to my controller, but even when I add a json or html format to the post - I still get the error.
Pulling my hair out over this test - would love some guidance on how best to rewrite this test for the best outcome.
The test
test "should create captable" do
sign_in #user
post company_captables_url(#company, #captable), params: { captable: { company_id: #captable.company_id, name: "Great captable!", version: #captable.version } }, as: :json
assert_response :success
end
The method from the controller:
def create
#captable = #company.captables.new(captable_params)
respond_to do |format|
if #captable.save
format.html { redirect_to [#company, #captable], notice: 'Captable was successfully created.' }
format.json { render :show, status: :created, location: [#company, #captable] }
else
format.html { render :new }
format.json { render json: #captable.errors, status: :unprocessable_entity }
end
end
end
The full backtrace on the error :
Error:
CaptablesControllerTest#test_should_create_captable:
ActionController::UnknownFormat: ActionController::UnknownFormat
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_controller/metal/mime_responds.rb:205:in `respond_to'
/Users/jamespember/calmcap/app/controllers/captables_controller.rb:24:in `create'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/abstract_controller/base.rb:194:in `process_action'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_controller/metal/rendering.rb:30:in `process_action'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/abstract_controller/callbacks.rb:42:in `block in process_action'
/usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.1/lib/active_support/callbacks.rb:132:in `run_callbacks'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/abstract_controller/callbacks.rb:41:in `process_action'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_controller/metal/rescue.rb:22:in `process_action'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
/usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.1/lib/active_support/notifications.rb:168:in `block in instrument'
/usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.1/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
/usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.1/lib/active_support/notifications.rb:168:in `instrument'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_controller/metal/instrumentation.rb:32:in `process_action'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_controller/metal/params_wrapper.rb:256:in `process_action'
/usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.1/lib/active_record/railties/controller_runtime.rb:24:in `process_action'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/abstract_controller/base.rb:134:in `process'
/usr/local/lib/ruby/gems/2.5.0/gems/actionview-5.2.1/lib/action_view/rendering.rb:32:in `process'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_controller/metal.rb:191:in `dispatch'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_controller/metal.rb:252:in `dispatch'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/routing/route_set.rb:52:in `dispatch'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/routing/route_set.rb:34:in `serve'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/journey/router.rb:52:in `block in serve'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/journey/router.rb:35:in `each'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/journey/router.rb:35:in `serve'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/routing/route_set.rb:840:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/warden-1.2.7/lib/warden/manager.rb:36:in `block in call'
/usr/local/lib/ruby/gems/2.5.0/gems/warden-1.2.7/lib/warden/manager.rb:35:in `catch'
/usr/local/lib/ruby/gems/2.5.0/gems/warden-1.2.7/lib/warden/manager.rb:35:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/rack-2.0.5/lib/rack/tempfile_reaper.rb:15:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/rack-2.0.5/lib/rack/etag.rb:25:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/rack-2.0.5/lib/rack/conditional_get.rb:38:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/rack-2.0.5/lib/rack/head.rb:12:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/http/content_security_policy.rb:18:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/rack-2.0.5/lib/rack/session/abstract/id.rb:232:in `context'
/usr/local/lib/ruby/gems/2.5.0/gems/rack-2.0.5/lib/rack/session/abstract/id.rb:226:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/middleware/cookies.rb:670:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
/usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.1/lib/active_support/callbacks.rb:98:in `run_callbacks'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.1/lib/rails/rack/logger.rb:38:in `call_app'
/usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.1/lib/rails/rack/logger.rb:26:in `block in call'
/usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.1/lib/active_support/tagged_logging.rb:71:in `block in tagged'
/usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.1/lib/active_support/tagged_logging.rb:28:in `tagged'
/usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.1/lib/active_support/tagged_logging.rb:71:in `tagged'
/usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.1/lib/rails/rack/logger.rb:26:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/middleware/request_id.rb:27:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/rack-2.0.5/lib/rack/method_override.rb:22:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/rack-2.0.5/lib/rack/runtime.rb:22:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/activesupport-5.2.1/lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/middleware/executor.rb:14:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/middleware/static.rb:127:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/rack-2.0.5/lib/rack/sendfile.rb:111:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/railties-5.2.1/lib/rails/engine.rb:524:in `call'
/usr/local/lib/ruby/gems/2.5.0/gems/rack-test-1.1.0/lib/rack/mock_session.rb:29:in `request'
/usr/local/lib/ruby/gems/2.5.0/gems/rack-test-1.1.0/lib/rack/test.rb:266:in `process_request'
/usr/local/lib/ruby/gems/2.5.0/gems/rack-test-1.1.0/lib/rack/test.rb:119:in `request'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/testing/integration.rb:263:in `process'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/testing/integration.rb:24:in `post'
/usr/local/lib/ruby/gems/2.5.0/gems/actionpack-5.2.1/lib/action_dispatch/testing/integration.rb:350:in `block (2 levels) in <module:Runner>'
/Users/jamespember/calmcap/test/controllers/captables_controller_test.rb:39:in `block in <class:CaptablesControllerTest>'
You should change the test, because you're creating a new Captable entity. You don't need #captable variable here. And you don't need company_id inside the params - it is already in the url.
test "should create captable" do
sign_in #user
assert_difference '#company.captables.count', 1 do # it is good idea to check it was really created
post company_captables_url(#company), params: { captable: { name: "Great captable!", version: 'version_name' } }, as: :json
end
assert_redirected_to company_captable_url(#company, Captable.last)
end
I just want to show a picture but it always throws the same error. The join is correct but he doesn't show the image instead he throws that error.
Within the /series_images/ show and index the image is displayed with
<%= image_tag(#series_image.file, class: "img-responsive",) %>
That's working without any problems.
Here is the Server
Started GET "/series/beyond-the-boundary" for 127.0.0.1 at 2016-01-06 01:44:03 +0100
Processing by SeriesController#show as HTML
Parameters: {"id"=>"beyond-the-boundary"}
Series Load (0.3ms) SELECT "series".* FROM "series" WHERE "series"."slug" = $1 ORDER BY "series"."id" ASC LIMIT 1 [["slug", "beyond-the-boundary"]]
SeriesImage Load (0.3ms) SELECT "series_images".* FROM "series_images" WHERE "series_images"."series_id" = $1 [["series_id", 1]]
Rendered series/show.html.erb within layouts/application (3.4ms)
Completed 500 Internal Server Error in 7ms (ActiveRecord: 0.5ms)
NoMethodError - undefined method `file' for #<SeriesImage::ActiveRecord_Associations_CollectionProxy:0x007fc0e70be6e0>:
activerecord (4.2.5) lib/active_record/relation/delegation.rb:136:in `method_missing'
activerecord (4.2.5) lib/active_record/relation/delegation.rb:99:in `method_missing'
app/views/series/show.html.erb:2:in `_app_views_series_show_html_erb__1653679829410534096_70233272992260'
actionview (4.2.5) lib/action_view/template.rb:145:in `block in render'
activesupport (4.2.5) lib/active_support/notifications.rb:166:in `instrument'
actionview (4.2.5) lib/action_view/template.rb:333:in `instrument'
actionview (4.2.5) lib/action_view/template.rb:143:in `render'
actionview (4.2.5) lib/action_view/renderer/template_renderer.rb:54:in `block (2 levels) in render_template'
actionview (4.2.5) lib/action_view/renderer/abstract_renderer.rb:39:in `block in instrument'
activesupport (4.2.5) lib/active_support/notifications.rb:164:in `block in instrument'
activesupport (4.2.5) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.2.5) lib/active_support/notifications.rb:164:in `instrument'
actionview (4.2.5) lib/action_view/renderer/abstract_renderer.rb:39:in `instrument'
actionview (4.2.5) lib/action_view/renderer/template_renderer.rb:53:in `block in render_template'
actionview (4.2.5) lib/action_view/renderer/template_renderer.rb:61:in `render_with_layout'
actionview (4.2.5) lib/action_view/renderer/template_renderer.rb:52:in `render_template'
actionview (4.2.5) lib/action_view/renderer/template_renderer.rb:14:in `render'
actionview (4.2.5) lib/action_view/renderer/renderer.rb:42:in `render_template'
actionview (4.2.5) lib/action_view/renderer/renderer.rb:23:in `render'
actionview (4.2.5) lib/action_view/rendering.rb:100:in `_render_template'
actionpack (4.2.5) lib/action_controller/metal/streaming.rb:217:in `_render_template'
actionview (4.2.5) lib/action_view/rendering.rb:83:in `render_to_body'
actionpack (4.2.5) lib/action_controller/metal/rendering.rb:32:in `render_to_body'
actionpack (4.2.5) lib/action_controller/metal/renderers.rb:37:in `render_to_body'
actionpack (4.2.5) lib/abstract_controller/rendering.rb:25:in `render'
actionpack (4.2.5) lib/action_controller/metal/rendering.rb:16:in `render'
actionpack (4.2.5) lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in render'
activesupport (4.2.5) lib/active_support/core_ext/benchmark.rb:12:in `block in ms'
/Users/woorari/.rbenv/versions/2.2.3/lib/ruby/2.2.0/benchmark.rb:303:in `realtime'
activesupport (4.2.5) lib/active_support/core_ext/benchmark.rb:12:in `ms'
actionpack (4.2.5) lib/action_controller/metal/instrumentation.rb:44:in `block in render'
actionpack (4.2.5) lib/action_controller/metal/instrumentation.rb:87:in `cleanup_view_runtime'
activerecord (4.2.5) lib/active_record/railties/controller_runtime.rb:25:in `cleanup_view_runtime'
actionpack (4.2.5) lib/action_controller/metal/instrumentation.rb:43:in `render'
actionpack (4.2.5) lib/action_controller/metal/implicit_render.rb:10:in `default_render'
actionpack (4.2.5) lib/action_controller/metal/implicit_render.rb:5:in `send_action'
actionpack (4.2.5) lib/abstract_controller/base.rb:198:in `process_action'
actionpack (4.2.5) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (4.2.5) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
activesupport (4.2.5) lib/active_support/callbacks.rb:117:in `call'
activesupport (4.2.5) lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'
activesupport (4.2.5) lib/active_support/callbacks.rb:505:in `call'
activesupport (4.2.5) lib/active_support/callbacks.rb:92:in `__run_callbacks__'
activesupport (4.2.5) lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks'
activesupport (4.2.5) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (4.2.5) lib/abstract_controller/callbacks.rb:19:in `process_action'
actionpack (4.2.5) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (4.2.5) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
activesupport (4.2.5) lib/active_support/notifications.rb:164:in `block in instrument'
activesupport (4.2.5) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.2.5) lib/active_support/notifications.rb:164:in `instrument'
actionpack (4.2.5) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (4.2.5) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
activerecord (4.2.5) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (4.2.5) lib/abstract_controller/base.rb:137:in `process'
actionview (4.2.5) lib/action_view/rendering.rb:30:in `process'
actionpack (4.2.5) lib/action_controller/metal.rb:196:in `dispatch'
actionpack (4.2.5) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
actionpack (4.2.5) lib/action_controller/metal.rb:237:in `block in action'
actionpack (4.2.5) lib/action_dispatch/routing/route_set.rb:76:in `dispatch'
actionpack (4.2.5) lib/action_dispatch/routing/route_set.rb:45:in `serve'
actionpack (4.2.5) lib/action_dispatch/journey/router.rb:43:in `block in serve'
actionpack (4.2.5) lib/action_dispatch/journey/router.rb:30:in `serve'
actionpack (4.2.5) lib/action_dispatch/routing/route_set.rb:817:in `call'
warden (1.2.4) lib/warden/manager.rb:35:in `block in call'
warden (1.2.4) lib/warden/manager.rb:34: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.5) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
actionpack (4.2.5) 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.5) lib/action_dispatch/middleware/cookies.rb:560:in `call'
activerecord (4.2.5) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.2.5) lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in `call'
activerecord (4.2.5) lib/active_record/migration.rb:377:in `call'
actionpack (4.2.5) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.2.5) lib/active_support/callbacks.rb:88:in `__run_callbacks__'
activesupport (4.2.5) lib/active_support/callbacks.rb:778:in `_run_call_callbacks'
activesupport (4.2.5) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (4.2.5) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.2.5) lib/action_dispatch/middleware/reloader.rb:73:in `call'
actionpack (4.2.5) lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
better_errors (2.1.1) lib/better_errors/middleware.rb:84:in `protected_app_call'
better_errors (2.1.1) lib/better_errors/middleware.rb:79:in `better_errors_call'
better_errors (2.1.1) lib/better_errors/middleware.rb:57:in `call'
actionpack (4.2.5) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
web-console (2.2.1) lib/web_console/middleware.rb:39:in `call'
actionpack (4.2.5) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.2.5) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.2.5) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.2.5) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.2.5) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.2.5) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.2.5) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.2.5) 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.5) 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.5) lib/action_dispatch/middleware/static.rb:116:in `call'
rack (1.6.4) lib/rack/sendfile.rb:113:in `call'
railties (4.2.5) lib/rails/engine.rb:518:in `call'
railties (4.2.5) lib/rails/application.rb:165: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/woorari/.rbenv/versions/2.2.3/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service'
/Users/woorari/.rbenv/versions/2.2.3/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run'
/Users/woorari/.rbenv/versions/2.2.3/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'
Started POST "/__better_errors/a376ff2bf7c7dd19/variables" for 127.0.0.1 at 2016-01-06 01:44:03 +0100
The call happen within the series/show.html.erb
<%= image_tag(#series.series_image.file, class: "img-responsive",) %>
<p>
<strong>Name:</strong>
<%= #series.name %>
</p>
Series Controller
class SeriesController < ApplicationController
before_action :set_series, only: [:show, :edit, :update, :destroy]
# GET /series
# GET /series.json
def index
#series = Series.paginate(:page => params[:page], :per_page => 10)
end
# GET /series/1
# GET /series/1.json
def show
end
# GET /series/new
def new
#series = Series.new
end
# GET /series/1/edit
def edit
end
# POST /series
# POST /series.json
def create
#series = Series.new(series_params)
respond_to do |format|
if #series.save
format.html { redirect_to #series, notice: 'Series was successfully created.' }
format.json { render :show, status: :created, location: #series }
else
format.html { render :new }
format.json { render json: #series.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /series/1
# PATCH/PUT /series/1.json
def update
respond_to do |format|
if #series.update(series_params)
format.html { redirect_to #series, notice: 'Series was successfully updated.' }
format.json { render :show, status: :ok, location: #series }
else
format.html { render :edit }
format.json { render json: #series.errors, status: :unprocessable_entity }
end
end
end
# DELETE /series/1
# DELETE /series/1.json
def destroy
#series.destroy
respond_to do |format|
format.html { redirect_to series_index_url, notice: 'Series was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_series
#series = Series.friendly.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def series_params
params.require(:series).permit(:name, :tagline, :shortDESC, :longDESC, :rating, :release)
end
end
SeriesImage Controller
class SeriesImagesController < ApplicationController
before_action :set_series_image, only: [:show, :edit, :update, :destroy]
# GET /series_images
# GET /series_images.json
def index
#series_images = SeriesImage.paginate(:page => params[:page], :per_page => 5)
end
# GET /series_images/1
# GET /series_images/1.json
def show
end
# GET /series_images/new
def new
#series_image = SeriesImage.new
end
# GET /series_images/1/edit
def edit
end
# POST /series_images
# POST /series_images.json
def create
#series_image = SeriesImage.new(series_image_params)
respond_to do |format|
if #series_image.save
format.html { redirect_to #series_image, notice: 'Series image was successfully created.' }
format.json { render :show, status: :created, location: #series_image }
else
format.html { render :new }
format.json { render json: #series_image.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /series_images/1
# PATCH/PUT /series_images/1.json
def update
respond_to do |format|
if #series_image.update(series_image_params)
format.html { redirect_to #series_image, notice: 'Series image was successfully updated.' }
format.json { render :show, status: :ok, location: #series_image }
else
format.html { render :edit }
format.json { render json: #series_image.errors, status: :unprocessable_entity }
end
end
end
# DELETE /series_images/1
# DELETE /series_images/1.json
def destroy
#series_image.destroy
respond_to do |format|
format.html { redirect_to series_images_url, notice: 'Series image was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_series_image
#series_image = SeriesImage.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def series_image_params
params.require(:series_image).permit(:series_id, :file, :desc, :head, :headID, :home, :homeID)
end
end
The 2 Models
class Series < ActiveRecord::Base
extend FriendlyId
friendly_id :name, use: :slugged
validates :name, presence: true
has_many :series_images
end
class SeriesImage < ActiveRecord::Base
mount_uploader :file, PictureUploader
belongs_to :series
end
The gemfile
#better IDs
gem 'friendly_id', '~> 5.1'
#Bootstrap
gem 'bootstrap-sass', '~> 3.3', '>= 3.3.6'
#Image Upload
gem 'carrierwave', '~> 0.10.0'
#Bootswatch
gem 'bootswatch-rails', '~> 3.3', '>= 3.3.5'
# Devise User Management
gem 'devise', '~> 3.5', '>= 3.5.3'
#Pagination
gem 'will_paginate', '~> 3.1'
gem 'will_paginate-bootstrap', '~> 1.0', '>= 1.0.1'
The Migration of Series_Images
class CreateSeriesImages < ActiveRecord::Migration
def change
create_table :series_images do |t|
t.belongs_to :series, index:true
t.string :file
t.string :desc
t.boolean :head
t.integer :headID
t.boolean :home
t.integer :homeID
t.timestamps null: false
end
end
end
The problem is that you have a one to many relationship between Series and SeriesImages. So when you call #series.series_image in the view you are getting an active record collection back instead of a specific image. You could try doing #series.series_image.first.try(:file) and that would give you the first series_image if it exist. If this fails it will return nil.
Is a Series supposed to have multiple SeriesImages?
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