I want to populate one table in a DB from another table so that the
user does not need to enter the same information twice.
I have a registration table that is populated when a user creates an
account. Later I have a form that uses a different table, but contains
most of the same info as the registration table. I would like that
table to be prepopulated by the registration table before the user gets
to the form so that they can just update/change that information
instead of having to enter it all over again.
What is the best way to do this?
Code and pointers to tutorials is always helpful.
Thanks in advance -- K
If the two tables are actually storing the same data, I would say you need to consider a different database layout. But, I believe you are saying that you want to provide default values for the form, drawn from the users table. If that is the case, I you pre-populate an in-memory form model with info from the users table, and send that to the form view. This will then have that default data in the web form when it is viewed by the user. When the form is submitted, you treat it as you would any other form. In this method, you simply provide default values in the form fields, not in the database. Your controller might look something like this:
@viewer is the user that is logged in and viewing the page, perhaps set in a before_filter
def invitation
@invitation = Invitation.new
@invitation.address = @viewer.address
end
I have a user table that has_many pages which has_many page_modules.
There are different types of page_modules - an instructor_module , a
librarian _module, etc...
The user registers as either an instructor or a librarian - hence why I
have to store duplicate information in the user and the instructor/
librarian table.
Take this example: A librarian creates an account and fills out
information about themselves which is stored in the user table. They
create a page and then start
creating the page_modules. They come to the librarian _module. I want
the system to recognize that they are a librarian (per the role field
in the user table) and populate the librarian _module form from the
user table which will then be saved to the librarian _module.
If I was to use foreign keys linking the user table to the librarian
_module table instead of duplicating the data in two tables - how will
an instructor create the librarian _module or vice versa. Do you see my
point?
So again how can I preload data from one table to another table before
the forms view is displayed?
I would also accept help on my database scheme if I am way off base in
my thinking.
I’m not quite sure I understand the data duplication problem in your schema. But I think the solution you are looking for might be an after_create hook in the User model. If you define a method in your User model named after_create, it will be run after the model is ‘created’, in other words, after it has been inserted into the database for the first time. In this method, you might want to do something like:
class User < ActiveRecord::Base
…
def after_create
case self.role
when “librarian”
LibrarianModule.new do |mod|
# populate the mod object and save it
mod.user = self
...
mod.save!
end
when "instructor"
... # something similar
end
end
…
end
In this solution, creating a use automatically results in the creation of a corresponding LibrarianModule when the User model is first created. Depending on you project, it might make more sense to use an after_create method in the LibrarianModule. Hopefully this helps.