Mission agent step submission nested one-to-one polymorphic association overrride refactoring

James Peret %!s(int64=10) %!d(string=hace) años
padre
commit
57556dd8e5

+ 4 - 9
app/controllers/missions_controller.rb

@@ -97,15 +97,10 @@ class MissionsController < ApplicationController
97 97
   def step_submission
98 98
     mission = Mission.friendly.find(params[:id])
99 99
     agent = mission.mission_agents.friendly.find(params[:agent])
100
-    submission = StepSubmission.new
101
-    agent.agent_steps.first.step_validations.each do |validation|
102
-      if validation.validation_type == 'ValidationText'
103
-        submission.submission_contents << SubmissionContent.new
104
-        submission.submission_contents.last.build_submission('SubmissionText')
105
-      end
106
-    end
100
+    step = agent.agent_steps.find_by_step(params[:step])
101
+    submission = step.create_submission(step_submission_params, params[:step_submission][:submission_contents_attributes].values)
107 102
     respond_to do |format|
108
-      if submission.update(step_submission_params)
103
+      if submission.save
109 104
         format.html { redirect_to mission_agent_details_path(mission, agent), notice: (t 'mission.step_submission_confirmation') }
110 105
         format.json { head :no_content }
111 106
       else
@@ -127,7 +122,7 @@ class MissionsController < ApplicationController
127 122
     end
128 123
     
129 124
     def step_submission_params
130
-      params.require(:step_submission).permit(:agent_step_id, :validated, :validated_by_id, :date_validated, :created_at, :updated_at, :language, :cover_img, :slug, :end_date, :submission_contents_attributes => [:submission_content_id, :submission_type, :created_at, :updated_at])
125
+      params.require(:step_submission).permit(:agent_step_id, :validated, :validated_by_id, :date_validated, :created_at, :updated_at, :language, :cover_img, :slug, :end_date, :submission_contents_attributes => [:submission_content_id, :submission_type, :created_at, :updated_at, :submission_attributes => [:content, :submission_content_id]])
131 126
     end
132 127
     
133 128
 end

+ 16 - 0
app/models/agent_step.rb

@@ -2,4 +2,20 @@ class AgentStep < ActiveRecord::Base
2 2
   belongs_to :mission_agent
3 3
   has_many :step_validations
4 4
   has_many :step_submissions
5
+  
6
+  def create_submission(step_submission, contents)
7
+    submission = StepSubmission.new(step_submission)
8
+    submission.agent_step = self
9
+    validation_number = 0
10
+    self.step_validations.each do |validation|
11
+      if validation.validation_type == 'ValidationText'
12
+        submission.submission_contents << SubmissionContent.new
13
+        submission_text = contents[validation_number][:submission_text]
14
+        submission.submission_contents.last.build_submission('SubmissionText', submission_text)
15
+      end
16
+    end
17
+    validation_number = validation_number + 1
18
+    return submission
19
+  end
20
+  
5 21
 end

+ 2 - 2
app/models/submission_content.rb

@@ -3,9 +3,9 @@ class SubmissionContent < ActiveRecord::Base
3 3
   belongs_to :submission, polymorphic: true
4 4
   accepts_nested_attributes_for :submission, allow_destroy:true
5 5
   
6
-  def build_submission(klass)
6
+  def build_submission(klass, object)
7 7
     if klass = 'SubmissionText'
8
-      submission = SubmissionText.new
8
+      submission = SubmissionText.new(object)
9 9
       self.submission_type = klass
10 10
     end
11 11
     self.submission = submission  

+ 1 - 1
app/views/missions/_step_submission.html.erb

@@ -20,7 +20,7 @@
20 20
 					
21 21
 					<%= f.fields_for :submission_contents, SubmissionContent.new, show_empty: true do |f| %>
22 22
 						<%= f.alert_message "Please fix the errors below." %>
23
-						<%= f.fields_for :submission, SubmissionText.new, show_empty: true do |f| %>
23
+						<%= f.fields_for SubmissionText.new, as: :submission, show_empty: true do |f| %>
24 24
 							<%= f.text_field :content %>
25 25
 						<% end %>
26 26
 					<% end %>

+ 1 - 1
app/views/missions/show_agent_details.html.erb

@@ -76,7 +76,7 @@
76 76
 			<% # Steps %>
77 77
 			<% @agent.agent_steps.order('step ASC').each do |step| %>
78 78
 				<% step_submission = StepSubmission.new %>
79
-				<%= bootstrap_nested_form_for(step_submission) do |f| %>
79
+				<%= bootstrap_nested_form_for(StepSubmission.new, url: step_submission_path(step: step.step, mission: @mission.slug, agent: @agent.slug)) do |f| %>
80 80
 					<%= content_tag(:div, class: 'panel panel-default') do %>
81 81
 						<%= content_tag(:div, class: 'panel-heading') do %>
82 82
 							<%= content_tag(:h3, class: 'panel-title') do %>

+ 1 - 1
config/routes.rb

@@ -35,7 +35,7 @@ Avalanche2::Application.routes.draw do
35 35
   get 'agent/:id' => 'agents#show', as: :show_agent
36 36
   
37 37
   # Steps
38
-  post 'missions/:id/agents/:agent/step_submission' => 'missions#step_submission', as: :step_submissions
38
+  post 'missions/:id/agents/:agent/steps/:step/step_submission' => 'missions#step_submission', as: :step_submission
39 39
 
40 40
   # Admin Panel
41 41
   get "admin/dashboard" => "admin_panel#dashboard", :as => :admin_dashboard