Methodology for a Rails app
Posted
by
Aaron Vegh
on Stack Overflow
See other posts from Stack Overflow
or by Aaron Vegh
Published on 2009-07-18T13:28:00Z
Indexed on
2011/06/23
0:22 UTC
Read the original article
Hit count: 232
ruby-on-rails
I'm undertaking a rather large conversion from a legacy database-driven Windows app to a Rails app. Because of the large number of forms and database tables involved, I want to make sure I've got the right methodology before getting too far.
My chief concern is minimizing the amount of code I have to write. There are many models that interact together, and I want to make sure I'm using them correctly. Here's a simplified set of models:
class Patient < ActiveRecord::Base has_many :PatientAddresses has_many :PatientFileStatuses end
class PatientAddress < ActiveRecord::Base belongs_to :Patient end
class PatientFileStatus < ActiveRecord::Base belongs_to :Patient end
The controller determines if there's a Patient selected; everything else is based on that.
In the view, I will be needing data from each of these models. But it seems like I have to write an instance variable in my controller for every attribute that I want to use. So I start writing code like this:
@patient = Patient.find(session[:patient]) @patient_addresses = @patient.PatientAddresses @patient_file_statuses = @patient.PatientFileStatuses
@enrollment_received_when = @patient_file_statuses[0].EnrollmentReceivedWhen @consent_received = @patient_file_statuses[0].ConsentReceived @consent_received_when = @patient_file_statuses[0].ConsentReceivedWhen
The first three lines grab the Patient model and its relations. The next three lines are examples of my providing values to the view from one of those relations.
The view has a combination of text fields and select fields to show the data above. For example:
<%= select("patientfilestatus", "ConsentReceived", {"val1"=>"val1", "val2"=>"val2", "Written"=>"Written"}, :include_blank=>true )%> <%= calendar_date_select_tag "patient_file_statuses[EnrollmentReceivedWhen]", @enrollment_complete_when, :popup=>:force %>
(BTW, the select tag isn't really working; I think I have to use collection_select?)
My questions are:
- Do I have to manually declare the value of every instance variable in the controller, or can/should I do it within the view?
- What is the proper technique for displaying a select tag for data that's not the primary model?
- When I go to save changes to this form, will I have to manually pick out the attributes for each model and save them individually? Or is there a way to name the fields such that ActiveRecord does the right thing?
Thanks in advance, Aaron.
© Stack Overflow or respective owner