0

好的,还有 1 个,然后我希望完成。

我将 Wicked 用于多页表单,其中我还想使用 mysql 数据库中的多个表。所以我创建了第二个表和表单,但是,表单不会显示第二个表的输入字段,也不会显示下一个和上一个按钮。

用于创建表格内容的表单页面的代码:(这没有其他页面中的下拉列表,使用相同的表格(测量其他使用测量槽连接的地方))

<%= 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 %>

步骤控制器:

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

数据库模型:

查询测量:

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

测量在其模型中没有任何规定。这是基表:

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

更新

在我忙于添加一些额外(以后)需要的表时,在代码中弄乱了一些之后,错误就消失了。但是,它不显示任何指定的字段或标签,它只是一个显示 Maatregelen 的空白页面,没有其他内容。

第 3 页(前 2 页工作,他们使用 1 个表,第 3 页和第 4 页使用另一个表,稍后我将添加更多页面,甚至使用其他表)它都使用相同的查询和步骤控制器。

<%= 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 %>
4

0 回答 0