Hi, Try to get the Question object first. from that move to Question Response.
On Sun, Apr 8, 2012 at 5:55 PM, Colin Law <[email protected]> wrote: > On 6 April 2012 20:25, Vikram Anand <[email protected]> wrote: > > 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. > > > > ... > > > Sns::Application.routes.draw do > > root :to => "questions#index" > > resources :questions do > > resources :question_responses > > end > > > > > > question.rb: > > > > class Question < ActiveRecord::Base > > validates :title, :presence => true > > validates :description, :presence => true > > > > has_many :question_responses, :dependent => :destroy, :class_name => > > "QuestionResponse" > > accepts_nested_attributes_for :question_responses, :allow_destroy => > true > > end > > > > > > question_response.rb: > > > > class QuestionResponse < ActiveRecord::Base > > validates :body, :presence => true > > belongs_to :question, :foreign_key => "question_id" > > end > > > > > > questions_controller.rb: > > > > class QuestionsController < ApplicationController > > before_filter :find_question > > before_filter :find_question_response, :only => [:show, :edit, :update, > > :destroy] > > > > def index > > @question = Question.new > > @questions = Question.all > > end > > > > def new > > @question = Question.new > > @question_response = @question.question_responses.build > > end > > > > def create > > @question = Question.new(params[:question]) > > > > if @question.save > > flash[:notice] = "Question has been created." > > redirect_to @question > > else > > flash[:alert] = "Question has not been created." > > render :action => 'new' > > end > > > > @question_response = > > @question.question_responses.build(params[:question_response]) > > if @question_response.save > > flash[:notice] = "Reply has been created." > > redirect_to [@question, @question_response] > > else > > flash[:alert] = "Reply has not been created." > > render "question_responses/new" > > end > > end > > > > def show > > @question = Question.find(params[:id]) > > end > > > > def edit > > @question = Question.find(params[:id]) > > end > > > > def update > > @question = Question.find(params[:id]) > > > > if @question.update_attributes(params[:question]) > > flash[:notice] = "Question has been updated." > > redirect_to @question > > else > > flash[:alert] = "Question has not been updated." > > render :action => 'edit' > > end > > end > > > > def destroy > > @question = Question.find(params[:id]) > > @question.destroy > > flash[:notice] = "Question has been deleted." > > redirect_to questions_path > > end > > > > def find_question_response > > @question_response = @question.question_responses.find(params[:id]) > > end > > > > private > > def find_question > > if (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]) > > end > > end > > end > > > > > > Error with trace: > > > > undefined method `question_responses' for nil:NilClass > > > > app/controllers/questions_controller.rb:55:in `find_question_response' > > Read the error carefully, it says that nil has not got a method > question_responses, so the object you are trying to call the method on > is nil. So apparently @question is nil, assuming that line 55 is > @question_response = @question.question_responses.find(params[:id]) > > The reason is that this is being called in a before_filter and you > have not got any code there to setup @question. > > Colin > > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Talk" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. > > -- Thanks & Regards, MuraliDharaRao.T +91-9642234646 -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

