Guest User

Untitled

a guest
Jul 16th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.04 KB | None | 0 0
  1. ##base_answer.rb
  2. class BaseAnswer < ActiveRecord::Base
  3. belongs_to :user
  4. belongs_to :survey_question
  5. belongs_to :answer, :polymorphic => true, :dependent => :destroy
  6. end
  7. ##answer.rb
  8. class Answer < ActiveRecord::Base
  9. self.abstract_class = true
  10. has_one :base_answer, :as => :answer
  11.  
  12. after_save :save_base_answer
  13.  
  14. delegate :survey_question, :to => :base_page_proxy
  15.  
  16. def base_answer_proxy
  17. if base_answer
  18. base_answer
  19. else
  20. @base_answer_proxy ||= BaseAnswer.new
  21. end
  22. end
  23.  
  24. protected
  25.  
  26. def save_base_answer
  27. base_answer_proxy.answer = self
  28. base_answer_proxy.save
  29. base_answer(true)
  30. end
  31.  
  32. end
  33. ##user.rb
  34. class User < ActiveRecord::Base
  35. acts_as_authentic
  36.  
  37. has_many :sites
  38. has_many :surveys, :through => :sites
  39. has_many :base_answers
  40.  
  41. #named_scope :gender, lambda { |g| { :conditions => {:demographics => {:gender => g}} , :include => :demographic } }
  42.  
  43. GENDER = {:Male => 'f', :Female => 'f'}
  44.  
  45. end
  46. ##rating_answer.rb
  47. class RatingAnswer < Answer
  48. end
  49. ##essay_answer.rb
  50. class EssayAnswer < Answer
  51. end
  52. ##survey_question.rb
  53. class SurveyQuestion < ActiveRecord::Base
  54. belongs_to :survey
  55. belongs_to :question
  56.  
  57. acts_as_list :scope => :survey
  58.  
  59. has_many :base_answers
  60.  
  61. #not checking survey_id due to circular dependencies when creating it
  62. validates_presence_of :question_id#, :survey_id
  63.  
  64. end
  65. ##question.rb
  66. class Question < ActiveRecord::Base
  67. belongs_to :category
  68. has_many :survey_questions
  69.  
  70. validates_presence_of :text, :category_id
  71.  
  72. def new_answer
  73. type.to_s.gsub("Question", "Answer").constantize.new
  74. end
  75.  
  76. def kind
  77. type.to_s.gsub(type.superclass.to_s,"")
  78. end
  79.  
  80. def self.kinds_of
  81. #.Object.subclasses_of(Question).collect do |klass|
  82. # [klass.to_s.gsub("Question", ""), klass.to_s]
  83. #end
  84. [["Essay", "EssayQuestion"], ["Rating", "RatingQuestion"]]
  85. end
  86. end
  87. ##base_answer schema
  88. class CreateBaseAnswers < ActiveRecord::Migration
  89. def self.up
  90. create_table :base_answers do |t|
  91. t.integer :user_id
  92. t.integer :survey_question_id
  93. t.integer :answer_id
  94. t.string :answer_type
  95. t.timestamps
  96. end
  97. end
  98.  
  99. def self.down
  100. drop_table :base_answers
  101. end
  102. end
  103. ##answers_controller.rb
  104. class AnswersController < ApplicationController
  105. before_filter :get_survey_question, :only => [:new, :create, :edit, :update]
  106. before_filter :new_answer, :only => [:new, :create]
  107.  
  108. def new
  109. @frame_url = @survey_question.url.blank? ? @survey_question.survey.url : @survey_question.url
  110. #Send to the edit page if the user already answered the question
  111. #if @user.answered_question?(@question)
  112. # redirect_to edit_panel_question_answer_path(@panel, @question)
  113. #end
  114. end
  115.  
  116. def create
  117. @answer.build_base_answer(:user_id => current_user.id, :survey_question_id => @survey_question.id)
  118. #@answer.base_answer.build
  119. #@answer.base_answer.user = current_user
  120. #@answer.base_answer.survey_question = @survey_question
  121. if @answer.save
  122. flash[:notice] = "Successfully created answer."
  123. next_survey_question = @answer.base_answer.survey_question.lower_item
  124. redir = next_survey_question.nil? ? survey_end_path(@survey_question.survey) : new_survey_question_answer_path(next_survey_question)
  125. redirect_to redir
  126. else
  127. render :action => 'new'
  128. end
  129. end
  130.  
  131. def edit
  132. @answer = Answer.find(params[:id])
  133. end
  134.  
  135. def update
  136. @answer = Answer.find(params[:id])
  137. if @answer.update_attributes(params[:answer])
  138. flash[:notice] = "Successfully updated answer."
  139. redirect_to @answer
  140. else
  141. render :action => 'edit'
  142. end
  143. end
  144.  
  145. def destroy
  146. @answer = Answer.find(params[:id])
  147. @answer.destroy
  148. flash[:notice] = "Successfully destroyed answer."
  149. redirect_to answers_url
  150. end
  151.  
  152. private
  153.  
  154. def get_survey_question
  155. @survey_question = SurveyQuestion.find(params[:survey_question_id])
  156. end
  157.  
  158. def new_answer
  159. @answer = @survey_question.question.new_answer
  160. end
  161. end
Add Comment
Please, Sign In to add comment