Okay, 1 more then i am hopefully done.
I am using Wicked for multi page forms in which i also want to use multiple tables from a mysql database. So i created a second table and form, however, the form wont show the input fields for that second table, nor the next and previous buttons.
The code for the form page used to create the table contents:(this doesnt have the dropdown list as in the other page, uses the same table(measures where the other uses measures trough a join))
<%= form_for @enquiry, method: :put, url: wizard_path do |f| %>
<% if f.object.errors.any? %>
<div class="error_messages">
<% f.object.errors.full_messages.each do |error| %>
<p><%= error %></p>
<% end %>
</div>
<% end %>
<fieldset>
<legend>Maatregel aanmaken </legend>
<%= f.fields_for :measures do |measure| %>
<%#measure.fields_for :measure do |measure| %>
<div>
<%= f.label :measurement %>
<%= measure.text_field :measurement %>
</div>
<div>
<%= f.label :type%>
<%= measure.text_field :type %>
</div>
<div>
<%= f.label :valid_from%>
<%= measure.date_select :valid_from %>
</div>
<div>
<%= f.label :valid_to%>
<%= measure.date_select :valid_to %>
</div>
<div>
<%= f.submit 'Next Step' %>
<%# knop naar vorige pagina %>
<%= button_to "vorige", enquirys_path %>
<%# 24-11 MG knop die je terug stuurt naar de homepage %>
<%= button_tag "Annuleren", :type => 'button', :class => "subBtn", :onclick => "location.href = '#{root_path()}'" %>
</div>
</fieldset>
<% end %>
The steps_controller:
class Enquirys::StepsController < ApplicationController
include Wicked::Wizard
steps *Enquiry.form_steps
def show
@enquiry = Enquiry.find(params[:enquiry_id])
render_wizard
end
def update
@enquiry = Enquiry.find(params[:enquiry_id])
@enquiry.update(enquiry_params(step))
render_wizard @enquiry
end
private
def enquiry_params(step)
permitted_attributes = case step
when "basic"
[:Reference, :Location, :Description]
when "when"
[:Amount, :Date]
#when "measurements"
#[:responsible]
when "createmeasures"
[:measurement]
end
params.require(:enquiry).permit(permitted_attributes).merge(form_step: step)
end
end
The database models:
Enquiry_measure:
class EnquiryMeasure < ActiveRecord::Base
belongs_to :enquiry, :class_name => 'Enquiry' #, inverse_of: :enquiry_measures
validates_presence_of :enquiry
has_many :measure, :class_name => 'Measure'
end
Measurement has nothing specified in its model. This is the basetable:
class Enquiry < ActiveRecord::Base
#ophalen van andere tabellen voor het formulier. Has_many is 1 op veel relatie
#accepts_nested_attributes Nested attributes allow you to save attributes on associated records through the paren
# de dere regel zorgt ervoor dat de maatregelen worden opgehaald via de tussentabel enquiry_measures.
# has_many :enquiry_measures, :class_name => 'EnquiryMeasure'#, inverse_of: :Enquiry
# accepts_nested_attributes_for :enquiry_measures, :allow_destroy => true
# has_many :measures, -> { uniq }, :class_name => 'Measure', :through => :enquiry_measures, dependent: :destroy
# 28-11 MG de pagina's die in het form worden gebruikt.
cattr_accessor :form_steps do
%w(basic when measurements)
end
attr_accessor :form_step
validates :Reference, :Location, presence: true, if: -> { required_for_step?(:basic) }
validates :Amount, :Date, presence: true, if: -> { required_for_step?(:when) }
#validates :needed, presence: true, if: -> { required_for_step?(:measurements) }
def required_for_step?(step)
return true if form_step.nil?
return true if self.form_steps.index(step.to_s) <= self.form_steps.index(form_step)
end
end
Update
After some messing around in the code while i was busy adding some extra (later) needed tables, the error has gone away. However, it does not show any of the fields or labels specified, it is just a empty page with the Maatregelen showing and nothing else.
Page nr 3(first 2 pages work, they use 1 table, page 3 and 4 use the other table, later i will add more pages, using even other tables) It all uses the same enquiry and steps controllers.
<%= form_for @enquiry, method: :put, url: wizard_path do |f| %>
<% if f.object.errors.any? %>
<div class="error_messages">
<% f.object.errors.full_messages.each do |error| %>
<p><%= error %></p>
<% end %>
</div>
<% end %>
<fieldset>
<legend>Maatregelen</legend>
<%= f.fields_for :enquiry_measures do |enquiry_measures| %>
<%= enquiry_measures.fields_for :measure do |measures| %>
<div>
<%= f.label :Maatregel %>
<br />
<%# collection_select(:measure, :enquiry_id, Enquiry.all, :id, :measurement) %>
<%# http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_select -%>
<%= collection_select :measurement, :enquiry_measures, measures.select(:measurement).uniq.order('measurement ASC'), :measurement, :measurement, {:prompt => 'kies een maatregel'},{:name => 'select_measurement'} %>
</div>
<div>
<%= f.label :Gereed %>
<br />
<%= enquiry_measures.text_field :done %>
</div>
<div>
<%= f.label :Verantwoordelijke %>
<br />
<%= enquiry_measures.text_field :responsible %>
</div>
<div>
<%= f.label :Benodigd %>
<br />
<%= enquiry_measures.text_field :needed %>
</div>
<div>
<%= f.submit 'Next Step' %>
</div>
<% end %> <%# end of enquiry_measures.fields_for :measure %>
<% end %> <%# end of f.fields_for :enquiry_measures %>
</fieldset>
<% end %>