Hello everyone,
I am developing a web app that is being used to track users and their
associated events. Events could be like ‘getting married’, ‘having a
baby’, ‘buying a car’, etc. and each event has a median age associated
with it. For instance the getting married median age is 25.
I have the application working with checkboxes where you can click
edit on a user and see all the possible events listed and the events
that are associated with that user have a check in the checkbox next
to the event.
See screen shot here: http://www.jonkinney.com/rails/Picture3.png
I am using a join model called occurrence.
the new task I am faced with is upon the creation of a new user I
would like to auto associate all events with them based on the user’s
age and the ages defined in the events. Eventually I would like to
have it so that you can be within 5 years on either side of the median
age defined for the event and it will auto associate upon creation of
a new user.
Here is some of my code…
I was trying to get it to work with a callback in the user model
called ‘before_save :assign_age_items’
class User < ActiveRecord::Base
has_many :occurrences, :dependent => :destroy #, :conditions =>
“enabled = 1”
has_many :events, :through => :occurrences
before_save :assign_age_items
validates_uniqueness_of :username, :on => :create, :message => “must
be unique”
validates_presence_of :username, :on => :create, :message => “can’t
be blank”
validates_presence_of :password, :on => :create, :message => “can’t
be blank”
validates_presence_of :email, :on => :create, :message => “can’t be
blank”
validates_presence_of :fname, :on => :create, :message => “can’t be
blank”
validates_presence_of :lname, :on => :create, :message => “can’t be
blank”
validates_presence_of :gender, :on => :create, :message => “can’t be
blank”
This doesn’t work
attr_reader :user
def initialize(user)
@user = user
end
####### This does work…
def event_ids=(list)
list ||= []
occurrences.delete_all
events << Event.find(list)
end
#######
####### This doesn’t work… assigning user’s default age specific
items when first created…
def assign_age_items
year = Time.now.year
birthyear = @user.dob.year
age = year - birthyear
events << Events.find_by_age(age)
end
USER CONTROLLER…relevant code
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
flash[:notice] = ‘User was successfully created.’
redirect_to :action => ‘list’
else
render :action => ‘new’
end
end
I am trying to figure out how I can calculate the age of the user that
is trying to sign up and then associate some events with them so that
when they first view their home screen there are already some events
that they MIGHT be interested in and then if they don’t want that info
they can still manually edit it and remove the default events.
Similarly if they want info that wasn’t initially suggested for them
they will have the ability to search and add events manually (I have
that working already I just can’t get the association upon creation).
Any insight into using the def initialize and how to pass parameters
to it or whatever I need to do would be greatly appreciated. Also I’m
confused what to do in my user_controller with the def new and the def
create. What is the difference? Should I be making those one method?
Thanks!
-Jon