【问题标题】:Displaying an explicit number of nested attributes in a Rails form在 Rails 表单中显示明确数量的嵌套属性
【发布时间】:2011-02-21 15:10:34
【问题描述】:

给定三个模型:

  1. 文档
  2. 资产
  3. 资产类别

一个文档接受_nested_attributes_for assets(一个文档有_many assets),并且一个asset belongs_to 一个asset category。

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

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

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

查看(这个例子使用了 Formtastic 提供的语义字段 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。

【问题讨论】:

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


    【解决方案1】:

    在控制器中:

    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
    

    【讨论】:

    • 我还需要视图中的“af.input :asset_category_id, :as => :hidden, :value => af.object.asset_category.id”,或者资产类别未正确设置提交表格时的附件。这也意味着如果存在验证错误(即,如果没有为特定字段选择文件,则不需要再次构建它们),当从 create 调用 render => :new 时,文档的资产被保留。跨度>
    猜你喜欢
    • 1970-01-01
    • 2013-06-05
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多