Я создаю веб-приложение, для работы которого требуется несколько сложная форма.
У меня есть пять моделей: Grid
, Row
, Value
, VariableGroup
и Variable
(это не фактические имена, но полезные для справки).
A Grid
имеет много rows
, а Row
имеет много values
.Кроме того, Grid
принадлежит VariableGroup
, которая является своего рода моделью, которая группирует множество переменных для своих внуков.
A Variable
, конечно, принадлежит VariableGroup
, иключ здесь в том, что Value
также принадлежит Variable
.
Модели:
class Grid < ActiveRecord::Base
belongs_to :variable_group
has_many :rows
accepts_nested_attributes_for :rows, :allow_destroy => true
end
class Row < ActiveRecord::Base
belongs_to :grid
has_many :values
accepts_nested_attributes_for :values, :allow_destroy => true
end
class Value < ActiveRecord::Base
belongs_to :variable
belongs_to :row
end
class Variable < ActiveRecord::Base
belongs_to :variable_group
end
class VariableGroup < ActiveRecord::Base
has_many :variables
has_many :grids
end
Ожидаемое поведение для создания новогоСетка:
Пользователь должен выбрать VariableGroup
из выпадающего списка.Этот выбор имеет обработчик jQuery для .change
, который должен создавать вложенную модель Row
, которая, в свою очередь, создает столько Value
моделей, сколько Variables
существует в выбранной группе переменных Grid.
Этоформа сетки:
= simple_form_for @grid, :html => {:class => 'form-horizontal' } do |f|
= f.input :name
= f.association :variable_group_id
.rows_and_values_container
= f.simple_fields_for :rows do |p|
= render 'rows_fields', :f => p
= f.submit
А это прикрепленный слушатель:
$('document').ready(function(){
$('#grid_variable_group_id').change(function(){
$.ajax({url: '/grids/load_variables_in_values',
data: 'selected=' + this.value,
dataType: 'script'})
});
});
А это действие load_variables_in_values:
def load_variables_in_values
@grid = Grid.new
row = @grid.rows.build
@variables = Variable.where(:variable_group_id => params["selected"])
@variables.each do |variable|
value = row.values.build
value.variable_id = variable.id
end
# render :partial => "test_data_sets_fields"
respond_to do |format|
format.js
end
end
Блок response_to даетуправление представлением js.erb, которое должно загружать следующий фрагмент, но я застрял здесь, поскольку не знаю, где и как обрабатывать загрузку фрагмента и его подчастей:
#rows_fields partial
= f.input :name
= f.input :grid_id #Should be hidden
= f.simple_fields_for :test_data_values do |p|
= render 'values_fields', :f => p
#values_fields partial
= f.input :value
= f.input :row_id #Should be hidden
= f.input :variable_id #Auto-assigned
Я думаю, что я на 80%, но я не знаю, как загрузить партиалы с соответствующими значениями с данными, которые я обрабатываю в пользовательском действии контроллера, которое было вызвано через AJAX.
Я знаюЭто сообщение длиной в милю, поэтому заранее спасибо, если вы получили здесь.