【问题标题】:How to pre-populate nested fields with existing data in Rails?如何使用 Rails 中的现有数据预填充嵌套字段?
【发布时间】:2017-04-24 11:21:39
【问题描述】:

我有包含许多成分的收据模型。所以,我用

gem "nested_form"
gem "cocoon"

用于嵌套表单。在创造一种新成分(或几种成分)的同时,一切都很顺利。但我想在编辑时用现有数据预填充此字段。

_form.html.slim

= f.fields_for :ingredients, [@receipt.ingredients.build] do |i|
    = render 'ingredient_fields', f: i
    = link_to_add_association 'Add ingredient', f, :ingredients, class: "btn btn-success"
  br/

_ingredient_fields.html.slim

.nested-fields
  .row
    .form-group.col-xs-5
      .field        
        = f.text_field :name, placeholder: "Name", class: "form-control"
    .form-group.col-xs-3
      .field
        = f.number_field :count, placeholder: "Count", class: "form-control"
    .form-group.col-xs-3    
      .field
        = f.select :count_name, [['gr', 'gr'], ['kg', 'kg']], placeholder: "count name", class: "form-control"
    = link_to_remove_association image_tag("/close.png"), f

这是收据控制器的一部分

def edit
    @ingredients = @receipt.ingredients
end

【问题讨论】:

  • 你能发布你的成分控制器吗?您通常会在编辑操作中执行@ingredient = Ingredient.find(params[:id])。这将找到与该 ID 关联的所有成分和成分字段
  • @ThorTL67 我编辑了,但它是收据控制器。

标签: ruby-on-rails nested-forms cocoon-gem


【解决方案1】:

在你的表格中你应该写:

= f.fields_for :ingredients do |i|

这将遍历收据的现有成分。如果您仍然想在创建新收据时默认添加新成分,您可以在receipts_controller 中执行以下最简单的操作:

def new
  @receipt = Receipt.new
  @receipt.ingredients.build
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-17
    • 2015-11-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多