0
votes

What I want to do: Have a User who is currently logged on ("current_user") create a new instance of the Adult class ("adult") and - if current_user does not specify the number of kids (num_kids) that adult has AND current_user specifies that adult.relationship of adult to user is "husband", "wife" or "partner", then I want to set the value of adult.num_kids equal to the existing value of user.num_kids

Background: I have a User class and an Adult class. A User has_many Adults and an Adult belongs_to a User.

I have a current_user helper method defined in my application_controller:

class ApplicationController < ActionController::Base
    protect_from_forgery with: :exception
    helper_method :current_user

    private 
    def current_user
        current_user ||= User.find(session[:user_id]) if session[:user_id]
    end
end

In my Adults Controller / create function I have the line: @adult.user_id = current_user.id

This works fine, and I am able to create Adults with the correct reference to the User that the Adult belongs_to.

In my Adult model, I have:

class Adult < ActiveRecord::Base
    has_many :kids
    belongs_to :user

    after_initialize :defaults
    after_create :defaults_shared_info

    def defaults
        self.vacation_days ||= '10'
    end         

    def defaults_shared_info
        if ['husband', 'wife', 'partner'].any? { self.relationship }
            self.num_kids ||= User.find(self.user_id).num_kids
        else
        end
    end
end

The setting of vacation_days = 10 by default works fine.

However, the setting of the Adult's num_kids to the User's num_kids does not, and I end up with adult.num_kids = nil

I have confirmed that user.num_kids = 2 , so that is not the problem.

When I change the code to

    def defaults_shared_info
        if ['husband', 'wife', 'partner'].any? { self.relationship }
            self.num_kids ||= current_user.num_kids
        else
        end
    end

I get the error message "undefined local variable or method `current_user'"

I had initially tried NOT distinguishing between after_initialize and after_create, and had had all the code under after_initialize :defaults

This also gave the same error "undefined local variable or method `current_user'"

I am confused about why, if I can create an instance of Adult with reference to the current_user.id, the code above is not working.

1
Just a side note: I think the assumption that a husband and his wife need to have the same number of children is not correct.spickermann
I agree. I'm only making that assumption IF a number isn't specified by the person filling out the form.WallE

1 Answers

0
votes

By changing after_create to before_create, I got this working.

Thanks to the folks posting here: https://stackoverflow.com/a/21757230/4797451