我正在构建一个web应用程序,它需要一个稍微复杂的表单才能运行。
我有五种型号:GridRowValueVariableGroupVariable(这些不是实际的名称,但可供参考)。
AGrid有多个rows,ARow有多个values此外,aGrid属于aVariableGroup,它是一种为其孙子孙女分组许多变量的模型。
当然,AVariable属于AVariableGroup,这里的关键是AValue也属于AVariable
模型:

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。该选择有一个用于“cc>”的jQuery处理程序,它必须实例化嵌套的.change模型,它在网格的选定变量组中实例化多达Row > Value
这是网格表单:
= 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

respond_to block将控件生成一个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调用的自定义控制器操作中处理的数据加载带有相应值的部分。
我知道这是一英里长的邮递员,所以如果你来了,请提前谢谢。

最佳答案

从自定义控制器操作呈现部分,而不是使用响应块工作。
我只需要硬编码表单的作用域(读取自动生成表单的源代码,并将其结构用作字符串和随机值,它就可以工作了。

09-10 20:32