Commit 6fcf788e02ff6731733cb3bc6abb5dba63fa0ac9
1 parent
0484736d
Exists in
master
and in
21 other branches
[custom_forms] destroy answers when remove field
Also: - fix to avoid crash if there is some answer without a related field
Showing
3 changed files
with
14 additions
and
2 deletions
Show diff stats
plugins/custom_forms/lib/custom_forms_plugin/field.rb
| ... | ... | @@ -6,7 +6,7 @@ class CustomFormsPlugin::Field < ActiveRecord::Base |
| 6 | 6 | attr_accessible :name, :form, :mandatory, :type, :position, :default_value, :select_field_type, :alternatives_attributes |
| 7 | 7 | |
| 8 | 8 | belongs_to :form, :class_name => 'CustomFormsPlugin::Form' |
| 9 | - has_many :answers, :class_name => 'CustomFormsPlugin::Answer' | |
| 9 | + has_many :answers, :class_name => 'CustomFormsPlugin::Answer', :dependent => :destroy | |
| 10 | 10 | |
| 11 | 11 | has_many :alternatives, :order => 'position', :class_name => 'CustomFormsPlugin::Alternative' |
| 12 | 12 | accepts_nested_attributes_for :alternatives, :allow_destroy => true | ... | ... |
plugins/custom_forms/lib/custom_forms_plugin/submission.rb
| ... | ... | @@ -52,7 +52,7 @@ class CustomFormsPlugin::Submission < Noosfero::Plugin::ActiveRecord |
| 52 | 52 | self.answers.each do |answer| |
| 53 | 53 | answer.valid? |
| 54 | 54 | answer.errors.each do |attribute, msg| |
| 55 | - self.errors.add answer.field.id.to_s.to_sym, msg | |
| 55 | + self.errors.add answer.field.id.to_s.to_sym, msg if answer.field.present? | |
| 56 | 56 | end |
| 57 | 57 | end |
| 58 | 58 | end | ... | ... |
plugins/custom_forms/test/unit/custom_forms_plugin/field_test.rb
| ... | ... | @@ -33,6 +33,18 @@ class CustomFormsPlugin::FieldTest < ActiveSupport::TestCase |
| 33 | 33 | assert_equal form.fields, [license_field] |
| 34 | 34 | end |
| 35 | 35 | |
| 36 | + should 'destroy its answers after removing a field' do | |
| 37 | + form = CustomFormsPlugin::Form.create!(:name => 'Free Software', :profile => fast_create(Profile)) | |
| 38 | + field = CustomFormsPlugin::Field.create!(:name => 'Project name', :form => form) | |
| 39 | + | |
| 40 | + CustomFormsPlugin::Answer.create(:field => field, :value => 'My Project') | |
| 41 | + CustomFormsPlugin::Answer.create(:field => field, :value => 'Other Project') | |
| 42 | + | |
| 43 | + assert_difference 'CustomFormsPlugin::Answer.count', -2 do | |
| 44 | + field.destroy | |
| 45 | + end | |
| 46 | + end | |
| 47 | + | |
| 36 | 48 | should 'have alternative if type is SelectField' do |
| 37 | 49 | select = CustomFormsPlugin::Field.new(:name => 'select_field001', :type => 'CustomFormsPlugin::SelectField') |
| 38 | 50 | assert !select.save | ... | ... |