Code:
def create
# will load an existing address if it exists, else create a new one
@residence = Residence.find_or_create_by_number_and_aptnum_and_postalcode(params[:residence][:number], params[:residence][:aptnum], params[:residence][:postalcode])
@voter = @residence.voter.build(params[:voter])
if @voter.save and @residence.save
flash[:notice] = 'The voter was created successfully!'
redirect_to :action => 'list'
else
render :action => 'new'
end
end
def edit
@voter = Voter.find @params['id'], :include =>[ :residence, :memberships, :donations ]
@voter.donations.instance_eval do
def blank?
return self.collect { |d| d.deleted == 'N' ? d : nil }.compact.length == 0
end
end
#@voter = Voter.find @params['id'], :include => [ :residence, :memberships, :donations ]
#@voter = Voter.find @params['id'], :include => [ :residence ]
@session[:fullname] = @voter.firstname + @voter.lastname
@residence = Residence.find(@voter.residence_id)
#@memberships = Membership.find(:all, :conditions => [ "voter_id = ?", @params['id']])
#@donation = Donation.find(:all, :conditions => [ "voter_id = ? AND deleted = 'N'", @params['id'] ])
end
def update
@voter = Voter.find(params[:id])
#@voter = Voter.find @params['id'], :include => [ :residence, :memberships, :donations]
@residence = Residence.find(@voter.residence_id)
@residence.update_attributes(params[:residence])
if @voter.update_attributes(params[:voter]) || @residence.update_attributes(params[:residence])
flash[:notice] = 'The voter record was successfully updated.'
redirect_to :action => 'list', :id => @voter
else
render :action => 'edit'
end
end
The commented stuff is experimentation. In the edit, new screen for the partial I have the following code:
Code:
<tr>
<td align="right" class="heading-subtle">Gender</td>
<td align="left" ><%= options = [["Select a Gender", ""]] + Dropdown::GENDER
select("voter", "gender", options) %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Salutation</td>
<td align="left"><%= options = [["Select a Salutation", ""]] + Dropdown::SALUTATION
select("voter", "salutation", options) %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">First Name</td>
<td align="left"><%= text_field "voter", "firstname", "size" => 30, "maxlength" => 30 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Middle Name</td>
<td align="left"><%= text_field "voter", "middlename", "size" => 30, "maxlength" => 30 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Last Name</td>
<td align="left"><%= text_field "voter", "lastname", "size" => 30, "maxlength" => 35 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Apt Number</td>
<td align="left"><%= text_field "residence", "aptnum", "size" => 8, "maxlength" => 8 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Pre-Compass</td>
<td align="left"><%= options = [["Select a pre-compass direction", ""]] + Dropdown::COMPASS
select("residence", "precompass", options) %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Street Number</td>
<td align="left"><%= text_field "residence", "number", "size" => 10, "maxlength" => 10 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Street Name</td>
<td align="left"><%= text_field "residence", "streetname", "size" => 30, "maxlength" => 30 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Street Type</td>
<td align="left"><%= options = [["Select a street type", ""]] + Dropdown::STREETTYPE
select("residence", "streettype", options) %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Post-Compass</td>
<td align="left" class="heading-subtle"><%= options = [["Select a post-compass direction", ""]] + Dropdown::COMPASS
select("residence", "postcompass", options) %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Apartment Name</td>
<td align="left"><%= text_field "residence", "aptname", "size" => 30, "maxlength" => 30 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">City</td>
<td align="left" ><%= text_field "residence", "city", "size" => 30, "maxlength" => 50 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Province</td>
<td align="left" class="heading-subtle"><%= get_setting('prov_name') %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Postal Code</td>
<td align="left"><%= text_field "residence", "postalcode", "size" => 6, "maxlength" => 6 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Primary Language</td>
<% @voter.primary_language.nil? ? @voter.primary_language = 'English' : @voter.primary_language %>
<td align="left"><%= options = [["Select a Primary Language", ""]] + Dropdown::LANGUAGE
select("voter", "primary_language", options) %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Secondary Language</td>
<% @voter.secondary_language.nil? ? @voter.secondary_language = 'English' : @voter.primary_language %>
<td align="left"><%= options = [["Select a Secondary Language", ""]] + Dropdown::LANGUAGE
select("voter", "secondary_language", options) %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Birthdate</td>
<td align="left"><%= date_select 'voter', 'birthdate' %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Occupation</td>
<td align="left"><%= text_field "voter", "occupation", "size" => 20, "maxlength" => 20 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Citizenship</td>
<td align="left"><%= text_field "voter", "citizenship", "size" => 1, "maxlength" => 1 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Home Phone</td>
<td align="left"><%= text_field "voter", "ph_home", "size" => 12, "maxlength" => 12 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Office Phone</td>
<td align="left"><%= text_field "voter", "ph_office", "size" => 12, "maxlength" => 12 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Mobile Phone</td>
<td align="left"><%= text_field "voter", "ph_mobile", "size" => 12, "maxlength" => 12 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">FAX</td>
<td align="left"><%= text_field "voter", "ph_fax", "size" => 20, "maxlength" => 20 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Pager</td>
<td align="left"><%= text_field "voter", "ph_pager", "size" => 20, "maxlength" => 20 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Email</td>
<td align="left"><%= text_field "voter", "email", "size" => 30, "maxlength" => 30 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Alternate Email</td>
<td align="left"><%= text_field "voter", "alt_email", "size" => 30, "maxlength" => 30 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">IMID Name</td>
<td align="left"><%= text_field "voter", "imid", "size" => 20, "maxlength" => 20 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">IMID</td>
<% @voter.imtype.nil? ? @voter.imtype = 'None' : @voter.imtype %>
<td align="left"><%= options = [["Select an IM Type", ""]] + Dropdown::IMTYPES
select("voter", "imtype", options) %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Alternate IMID Name</td>
<td align="left"><%= text_field "voter", "alt_imid", "size" => 20, "maxlength" => 20 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Alternate IMID</td>
<% @voter.alt_imtype.nil? ? @voter.alt_imtype = 'None' : @voter.alt_imtype %>
<td align="left"><%= options = [["Select an alternate IM Type", ""]] + Dropdown::IMTYPES
select("voter", "alt_imtype", options) %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Homepage URL</td>
<td align="left">
<%= text_field "voter", "homepage", "size" => 30, "maxlength" => 100 %></td>
</tr>
<tr>
<td align="right" class="heading-subtle">Notes</td>
<td align="left"><%= text_area 'voter', 'notes', "rows" => 3 %></td>
</tr>
Now this did work whenever I did an edit but now it does not seem to save the record after edit. However, more importantly, you will see how I have identified the voter and residence tags in the partial and in the controller. I have the sneaking suspision that there is a better way of doing this but I am not sure what it is or how to express the syntax in the controller and the partial. It seems to me that everything in the partial should be prefixed with voter (as opposed to voter and residence) and then the params array plugged into the two tables through some magic. Can you guide me here?
Bookmarks