Ruby on Rails
Friday, April 6, 2012
For some reason (most likely in my view due to naming conventions) rails association is not working. Trying to access child object from parent object gives undefined method.
Routes.rb:
Sns::Application.routes.draw doroot :to => "questions#index"resources :questions doresources :question_responsesend
question.rb:
class Question < ActiveRecord::Basevalidates :title, :presence => truevalidates :description, :presence => truehas_many :question_responses, :dependent => :destroy, :class_name => "QuestionResponse"accepts_nested_attributes_for :question_responses, :allow_destroy => trueend
question_response.rb:
class QuestionResponse < ActiveRecord::Basevalidates :body, :presence => truebelongs_to :question, :foreign_key => "question_id"end
questions_controller.rb:
class QuestionsController < ApplicationControllerbefore_filter :find_questionbefore_filter :find_question_response, :only => [:show, :edit, :update, :destroy]def index@question = Question.new@questions = Question.allenddef new@question = Question.new@question_response = @question.question_responses.buildenddef create@question = Question.new(params[:question])if @question.saveflash[:notice] = "Question has been created."redirect_to @questionelseflash[:alert] = "Question has not been created."render :action => 'new'end@question_response = @question.question_responses.build(params[:question_response])if @question_response.saveflash[:notice] = "Reply has been created."redirect_to [@question, @question_response]elseflash[:alert] = "Reply has not been created."render "question_responses/new"endenddef show@question = Question.find(params[:id])enddef edit@question = Question.find(params[:id])enddef update@question = Question.find(params[:id])if @question.update_attributes(params[:question])flash[:notice] = "Question has been updated."redirect_to @questionelseflash[:alert] = "Question has not been updated."render :action => 'edit'endenddef destroy@question = Question.find(params[:id])@question.destroyflash[:notice] = "Question has been deleted."redirect_to questions_pathenddef find_question_response@question_response = @question.question_responses.find(params[:id])endprivatedef find_questionif (params[:question_response] && params[:question_response][:question_id])@question = Question.find(params[:question_response][:question_id])elsif params[:question_id]@question = Question.find(params[:question_id])endendend
Error with trace:
undefined method `question_responses' for nil:NilClassapp/controllers/questions_controller.rb:55:in `find_question_response'activesupport (3.2.1) lib/active_support/callbacks.rb:429:in `_run__35842215__process_action__9839693__callbacks'activesupport (3.2.1) lib/active_support/callbacks.rb:405:in `__run_callback'activesupport (3.2.1) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'activesupport (3.2.1) lib/active_support/callbacks.rb:81:in `run_callbacks'actionpack (3.2.1) lib/abstract_controller/callbacks.rb:17:in `process_action'actionpack (3.2.1) lib/action_controller/metal/rescue.rb:29:in `process_action'actionpack (3.2.1) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'activesupport (3.2.1) lib/active_support/notifications.rb:123:in `block in instrument'activesupport (3.2.1) lib/active_support/notifications/instrumenter.rb:20:in `instrument'activesupport (3.2.1) lib/active_support/notifications.rb:123:in `instrument'actionpack (3.2.1) lib/action_controller/metal/instrumentation.rb:29:in `process_action'actionpack (3.2.1) lib/action_controller/metal/params_wrapper.rb:205:in `process_action'activerecord (3.2.1) lib/active_record/railties/controller_runtime.rb:18:in `process_action'actionpack (3.2.1) lib/abstract_controller/base.rb:121:in `process'actionpack (3.2.1) lib/abstract_controller/rendering.rb:45:in `process'actionpack (3.2.1) lib/action_controller/metal.rb:203:in `dispatch'actionpack (3.2.1) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'actionpack (3.2.1) lib/action_controller/metal.rb:246:in `block in action'actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:66:in `call'actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:66:in `dispatch'actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:30:in `call'journey (1.0.3) lib/journey/router.rb:68:in `block in call'journey (1.0.3) lib/journey/router.rb:56:in `each'journey (1.0.3) lib/journey/router.rb:56:in `call'actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:589:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'rack (1.4.1) lib/rack/etag.rb:23:in `call'rack (1.4.1) lib/rack/conditionalget.rb:25:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/head.rb:14:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/params_parser.rb:21:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/flash.rb:242:in `call'rack (1.4.1) lib/rack/session/abstract/id.rb:205:in `context'rack (1.4.1) lib/rack/session/abstract/id.rb:200:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/cookies.rb:338:in `call'activerecord (3.2.1) lib/active_record/query_cache.rb:64:in `call'activerecord (3.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:443:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'activesupport (3.2.1) lib/active_support/callbacks.rb:405:in `_run__609157476__call__595802435__callbacks'activesupport (3.2.1) lib/active_support/callbacks.rb:405:in `__run_callback'activesupport (3.2.1) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'activesupport (3.2.1) lib/active_support/callbacks.rb:81:in `run_callbacks'actionpack (3.2.1) lib/action_dispatch/middleware/callbacks.rb:27:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/reloader.rb:65:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'railties (3.2.1) lib/rails/rack/logger.rb:26:in `call_app'railties (3.2.1) lib/rails/rack/logger.rb:16:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/request_id.rb:22:in `call'rack (1.4.1) lib/rack/methodoverride.rb:21:in `call'rack (1.4.1) lib/rack/runtime.rb:17:in `call'activesupport (3.2.1) lib/active_support/cache/strategy/local_cache.rb:72:in `call'rack (1.4.1) lib/rack/lock.rb:15:in `call'actionpack (3.2.1) lib/action_dispatch/middleware/static.rb:53:in `call'railties (3.2.1) lib/rails/engine.rb:479:in `call'railties (3.2.1) lib/rails/application.rb:220:in `call'rack (1.4.1) lib/rack/content_length.rb:14:in `call'railties (3.2.1) lib/rails/rack/log_tailer.rb:14:in `call'rack (1.4.1) lib/rack/handler/webrick.rb:59:in `service'/home/administrator/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'/home/administrator/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'/home/administrator/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/GOqOkHJTRBcJ.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment