0

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 %>
Marco
  • 75
  • 1
  • 13

0 Answers0