Я смотрел много уроков на YouTube / Google и прочитал много вопросов здесь, но я не понимаю, как заставить мою Ajax form_with работать. У меня есть два выбора, это вместе с моим фильтром. Я выбрал смену и линию, а затем хочу иметь таблицу всех работников, которые работают на этой линии в течение смены. И тогда мне нужно выбрать со всеми тренировками, принадлежащими этой линии. Если я сделаю это «старым / простым» способом с параметрами и функциями, я смогу это сделать, но теперь я хочу, чтобы он был на одной странице с ajax без какого-либо перенаправления / перезагрузки. Кроме того, я на самом деле не хочу иметь две кнопки отправки. Я хочу, чтобы фильтр выбрал автоматическое обновление второй формы.
Я пришел к выводу, если я делаю это с form_with это должно быть просто, потому что я не могу js. В настоящее время мой код, вероятно, беспорядок, но я надеюсь, что вы можете мне помочь.
add_worker_tm.js.erb
$("[data-placeholder~=tform]").html("<%= j render "tform" %>");
add_worker_tm.html.erb
<% provide(:title, "Mitarbeiter hinzufügen") %>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= render "filter" %>
<br><br>
<%= render "tform" %>
</div>
</div>
_filter.html.erb
<h1>Mitarbeiter hinzufügen</h1>
<%= form_with url: add_worker_tm_trainings_path do |f| %>
<%= f.label :schicht %>
<%= f.collection_select :shift, Shift.all, :id, :name %>
<%= f.label :linie %>
<%= f.collection_select :line, Line.all, :id, :name %>
<%= f.submit :submit %>
<% end %>
_tform.html.erb
<div id="tform">
<%= simple_form_for(@trainingmem = Trainingsmembership.new, url: add_worker_tm_trainings_path) do |f| %>
<div style="overflow: auto; height: 350px">
<table>
<tr>
<th style="width: 25px"></th>
<th style="width: 200px"><%= sort_link "name" %></th>
<th style="width: 125px"><%= sort_link "position" %></th>
<th style="width: 75px"><%= sort_link "Schicht" %></th>
<th style="width: 100px"><%= sort_link "linie" %></th>
</tr>
<% @workerall.each do |worker| %>
<tr>
<td><%= check_box_tag "worker_ids[worker_ids][]", worker.id %></td>
<td><%= worker.name %></td>
<td><%= Position.find(worker.position_id).name %></td>
<td><%= Shift.find(worker.shift_id).name %></td>
<td><% worker.line_ids.each do |line| %>
<%= Line.find(line).name %>
<% end %></td>
</tr>
<% end %>
</table>
</div>
<br><br>
<%= f.input :training_id, collection: @trainings, label_method: :name, value_method: :id, label: 'Training:', include_blank: false %>
<%= f.input :duration, label: 'Gültigkeit:' %>
<%= f.input :date, :as => :string, :input_html => { data: {behaviour: "datepicker"}}, label: 'Prüfungstermin:' %>
<!--#%= f.input :worker_id, collection: Worker.all, label_method: :name, value_method: :id, label: 'Mitarbeiter', include_blank: false, input_html: { multiple: false } %>-->
<%= f.input :comment, as: :text, label: 'Bemerkung:' %>
<%= f.input :attachement, as: :file, label: 'PDF-Protokoll:' %>
<%= f.submit "Training bearbeiten", class: "btn btn-primary" %>
<% end %>
<script type="text/javascript">
$('#micropost_picture').bind('change', function() {
var size_in_megabytes = this.files[0].size/1024/1024;
if (size_in_megabytes > 5) {
alert('Maximum file size is 5MB. Please choose a smaller file.');
}
});
</script>
<script type="text/javascript">
$('[data-behaviour~=datepicker]').datepicker({
"format": "dd.mm.yyyy",
"weekStart": 1,
"autoclose": true
});
</script>
</div>
trainings_controller
def add_worker_tm
@worker = Worker.new
@workers = Worker.order("#{sort_column} #{sort_direction}")
@workerall = Worker.all
@trainings = Training.all
end
def addworkers_tm
@workerall = Worker.order("#{sort_column} #{sort_direction}")
if params[:worker_ids].nil?
flash[:error] = "Kein Mitarbeiter ausgewählt!"
redirect_to add_worker_tm_trainings_path
return
end
@ws = params[:worker_ids].require('worker_ids')
@trainings = Training.all
@ws.each do |w|
@tm = Trainingsmembership.new(tm_params)
@tm.worker_id = w
if @tm.save
flash[:success] = "Mitarbeiter eingefügt"
#redirect_to root_path
else
@tm.errors
flash[:error] = "Fehler"
render 'add_worker_tm'
return
end
end
redirect_to root_path
end
маршруты
resources :trainings do
collection do
get 'add_worker_tm', to: 'trainings#add_worker_tm'
post 'add_worker_tm', to: 'trainings#addworkers_tm'
end
end
Если я пытаюсь отправить свой фильтр, у меня появляется POST, но я не знаю, как изменить содержимое контроллера и объединить его с ajax. Вторая форма показывает все мои рабочие и тренинги вместо отфильтрованных.
EDIT:
Я сделал это с партиалами, так что мне просто нужно обновить партиалы. Я все еще не могу понять, что мне делать с моим контроллером для ajax и что мне не хватает.