Ok everyone. I appreciate your time if you are looking at this, as
this site is being setup to assist veterans who are having trouble
with the health care system through the VA. And as I said, we are
pretty close at this point to going live beta so if you can help me
over this hump it would be extremely appreciated.
We have a form setup that asks the user to select a date when
treatment began and then when treatment ended. After that they fill
out a free text field explaining what kind of problems they
experienced during their treatment. Then they submit it.
After that you go to user stories to view the stories submitted by
everyone. Except we are getting an error when we try to open this page
The error is posted below, and also the code from the models and
controllers and rhtml files. I REALLY would appreciate any help in
resolving this, so that I can put it into open beta, and then get it
out to hopefully help make the nation aware of what is going on within
the VA healthcare system.
Thank you for your time,
Dave
P.S. if you spot the problem could you provide easy to understand
steps to resolve it?
Error from the page:
NoMethodError in Admissions#index
Showing app/views/admissions/_admission.rhtml where line #2 raised:
You have a nil object when you didn’t expect it!
The error occurred while evaluating nil.treatment_start
Extracted source (around line #2):
1:
2: date: <%=admission.treatment.treatment_start-%>
3: story: <%=admission.treatment.description-%>
4: <%= debug(admission) %>
5: <%= debug(admission.treatment)%>
_admission.rhtml
story: <%=admission.treatment.description-%> <%= debug(admission) %> <%= debug(admission.treatment)%>
treatment.rb (model)
class Treatment < ActiveRecord::Base
acts_as_rateable
belongs_to :user
belongs_to :condition
belongs_to :treatable, :polymorphic=>true
belongs_to :doctor_type
validates_presence_of :symptoms_start
def temp_rating=(temp_rating)
@rating=temp_rating
end
def temp_rating
@rating
end
end
admission.rb (model)
class Admission < ActiveRecord::Base
has_one :treatment, :as=>:treatable
belongs_to :hospital
end
treatments_controller.rb
class TreatmentsController < ApplicationController
requires_authentication :using => :authenticate,
:include => [:new, :create, :update, :edit],
:realm => ‘Unburdenus’
GET /treatments
GET /treatments.xml
def index
@treatments = Treatment.find(:all)
respond_to do |format|
format.html # index.rhtml
format.xml { render :xml => @treatments.to_xml }
end
end
GET /treatments/1
GET /treatments/1.xml
def show
@treatment = Treatment.find(params[:id])
respond_to do |format|
format.html # show.rhtml
format.xml { render :xml => @treatment.to_xml }
end
end
GET /treatments/new
def new
@user = User.current_user
@treatment = Treatment.new
@stylesheet_includes = [‘reset-fonts-
grids’,‘default’,‘glenn’,‘datebocks_engine’, ‘calendar-blue’]
@javascript_includes =
[“prototype”,“scriptaculous”,‘moo.fx.js’,‘accordion’,‘application’,“datebocks_engine”,
“calendar”, “lang/calendar-en”, “calendar-setup”,“fckeditor/
fckeditor”]
end
GET /treatments/1;edit
def edit
@treatment = Treatment.find(params[:id])
end
POST /treatments/1;rate
def rate
if params[:id].nil?
@treatment = Treatment.new
@treatment.temp_rating=params[:rating]
else
@treatment = Treatment.find(params[:id])
Rating.delete_all([“rateable_type = ‘Treatment’ AND rateable_id
= ? AND user_id = ?”, @treatment.id, User.current_user.id])
@treatment.add_rating Rating.new(:rating =>
params[:rating], :user_id => User.current_user.id)
end
end
POST /treatments
POST /treatments.xml
def create
@hospital = Hospital.find_or_create_by_name(params[:hospital]
[:name])
@admission = Admission.new(:hospital=>@hospital)
@treatment = Treatment.new(params[:treatment])
@treatment.condition =
Condition.find_or_create_by_name(params[:condition][:name])
@treatment.user = User.current_user
@treatment.treatable = @admission
respond_to do |format|
if @treatment.save
flash[:notice] = ‘Treatment was successfully created.’
format.html { redirect_to user_url(User.current_user) }
format.xml { head :created, :location =>
treatment_url(@treatment) }
else
format.html {
@stylesheet_includes = [‘reset-fonts-
grids’,‘default’,‘glenn’,‘datebocks_engine’, ‘calendar-blue’]
@javascript_includes =
[“prototype”,“scriptaculous”,‘moo.fx.js’,‘accordion’,‘application’,“datebocks_engine”,
“calendar”, “lang/calendar-en”, “calendar-setup”,“fckeditor/
fckeditor”]
render :action => “new”
}
format.xml { render :xml => @treatment.errors.to_xml }
end
end
end
PUT /treatments/1
PUT /treatments/1.xml
def update
@treatment = Treatment.find(params[:id])
respond_to do |format|
if @treatment.update_attributes(params[:treatment])
flash[:notice] = 'Treatment was successfully updated.'
format.html { redirect_to treatment_url(@treatment) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @treatment.errors.to_xml }
end
end
end
DELETE /treatments/1
DELETE /treatments/1.xml
def destroy
@treatment = Treatment.find(params[:id])
@treatment.destroy
respond_to do |format|
format.html { redirect_to treatments_url }
format.xml { head :ok }
end
end
end
admissions_controller.rb
class AdmissionsController < ApplicationController
GET /admissions
GET /admissions.xml
def index
@admissions = Admission.find(:all)
respond_to do |format|
format.html {
@stylesheet_includes = ['reset-fonts-grids','default','glenn']
}
format.xml { render :xml => @admissions.to_xml }
end
end
GET /admissions/1
GET /admissions/1.xml
def show
@admission = Admission.find(params[:id])
respond_to do |format|
format.html # show.rhtml
format.xml { render :xml => @admission.to_xml }
end
end
GET /admissions/new
def new
@admission = Admission.new
end
GET /admissions/1;edit
def edit
@admission = Admission.find(params[:id])
end
POST /admissions
POST /admissions.xml
def create
@admission = Admission.new(params[:admission])
respond_to do |format|
if @admission.save
flash[:notice] = 'Admission was successfully created.'
format.html { redirect_to admission_url(@admission) }
format.xml { head :created, :location =>
admission_url(@admission) }
else
format.html { render :action => “new” }
format.xml { render :xml => @admission.errors.to_xml }
end
end
end
PUT /admissions/1
PUT /admissions/1.xml
def update
@admission = Admission.find(params[:id])
respond_to do |format|
if @admission.update_attributes(params[:admission])
flash[:notice] = 'Admission was successfully updated.'
format.html { redirect_to admission_url(@admission) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @admission.errors.to_xml }
end
end
end
DELETE /admissions/1
DELETE /admissions/1.xml
def destroy
@admission = Admission.find(params[:id])
@admission.destroy
respond_to do |format|
format.html { redirect_to admissions_url }
format.xml { head :ok }
end
end
end