【问题标题】:rails 3 fields_for nested forms multiple recordsrails 3 fields_for嵌套表单多条记录
【发布时间】:2013-05-16 14:34:46
【问题描述】:

也许这里有人会帮助我。

我有以下型号vehicle.rb

class Vehicle < ActiveRecord::Base
  attr_accessible :parameters_attributes
  has_many :parameters, dependent: :destroy
  accepts_nested_attributes_for :parameters, reject_if: lambda {
  |attrs| attrs.all? {
    |tag, value|
      value.is_a?(Integer)
      tag.blank?
    }
  }
end

vehicles_controller.rb

def new
  @vehicle = Vehicle.new
end

在我看来new.html.haml:

= form_for [:admin, setup(@vehicle)], html: { multipart: true } do |f|
  %fieldset{ data: { hook: "new_vehicle" } }
    %legend{ align: "center" }
      = t(:new_vehicle)
  = render partial: 'shared_vehicle_fields', locals: { f: f }
  = f.field_container :size do
  = f.label :size
  %span.required *
  %br/
  = f.select :size, [t(:please_select) , "small", "medium", "large"], class: 'require'
  .parameter_fields
  %div.small_vehicle_parameters
    = f.fields_for :parameters do |pf|
      = render 'parameter_fields', f: pf, text: 'A1'
    = f.fields_for :parameters do |pf|
      = render 'parameter_fields', f: pf, text: 'A2'
  %div.medium_vehicle_parameters
  %div.large_vehicle_parameters
  %br/
  = f.submit t(:submit)

setup(@vehicle) 是以下助手:

def setup(vehicle)
  returning(vehicle) do |car|
    car.parameters.build if car.parameters.blank?
  end
end

部分parameter_fields 没什么特别的,但我会显示它以防万一:

= f.label :tag, text
= f.text_field :value, size: 4
= f.hidden_field :tag, { value: text }
%br/

现在,问题是这样的:

当我在表单的任何字段中输入正确的值时,一切都很好。它根据我的需要创建模型和记录。但是,如果任何验证未通过,则表单将再次呈现并显示错误消息。但是,参数 text_fields 是相乘的。我得到 2 个带有标签 A1fields_for 和 2 个带有 tag A2 的字段。如果我有 3 个fields_for,那么每个都有 3 个,依此类推。

如果有帮助,我知道我需要在表中创建多少条记录(取决于车辆大小)。

帮忙,有人吗?

【问题讨论】:

    标签: ruby-on-rails-3 nested-attributes fields-for multiple-records


    【解决方案1】:

    对于任何可能遇到类似问题并像我一样惊呆的人......

    发生的情况是,在验证失败后,@vehicle.parameters 有一个他想要创建的记录列表,这反过来又为页面上的每个 fields_for 渲染了 text_fields 的数量。这就是它的制作方法,Ruby on Rails 就是这样聪明的。这在编辑表单时很方便。他会自动呈现“正确”数量的字段。至少我是这样理解问题的。

    无论如何,如果save 不成功,我在create 操作中添加了以下行。

    @vehicle.parameters = []
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多