在Rails表单中显示显式数量的嵌套属性

时间:2011-02-21 15:10:35

标签: ruby-on-rails-3 forms nested-forms formtastic nested-attributes

鉴于三种模式:

  1. 文档
  2. 资产
  3. AssetCategory
  4. 文档accepted_nested_attributes_for资产(文档has_many资产),资产belongs_to资产类别。

    我想为每个资产类别显示资产属性的字段。

    我目前正在实现以下目标。控制器:

    def new
      @document = Document.new
      @asset_categories = AssetCategory.all
      @asset_categories.count.times { @document.assets.build }
    end
    

    View(此示例使用Formtastic提供的semantic_fields_for方法,但这只是fields_for的一个薄包装):

    i=0
    f.semantic_fields_for :assets do |asset_form|
      asset_form.input :attachment, :label => @asset_categories[i].name
      asset_form.input :asset_category, :as => :hidden, :value => @asset_categories[i].id
      i+=1
    end
    

    对此有更清洁的方法吗?我不太喜欢临时变量i。

1 个答案:

答案 0 :(得分:0)

在控制器中:

def new
  @document = Document.new
  AssetCategory.all.each do |ac|
    @document.assets.build :asset_category_id=>ac.id
  end
end

在视图中:

f.semantic_fields_for :assets do |af|
  af.input :attachment, :label=>af.object.asset_category.name
  af.input :asset_category_id, :as => :hidden, :value => af.object.asset_category.id
end