0

也許這裏有人會幫我。軌道3個fields_for嵌套形式的多個記錄

我有以下型號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個fields_for與標籤A1和2場與tagA2。如果我有3 fields_for,那麼會有3個,等等。

我知道我需要多少條記錄在表中創建(取決於車輛的大小),是否有幫助。

幫助,任何人嗎?

回答

1

對於誰可能會碰到類似的問題,因爲我是....愣是有人

發生什麼事了,經過驗證失敗的@vehicle.parameters有記錄列表,他想創造,這在轉,使頁面上每個fields_for的渲染量爲text_fields。這就是這樣做的,Ruby on Rails很聰明。這在編輯表單時非常方便。他自動呈現「正確」的字段數量。至少我是這樣理解問題的。

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

@vehicle.parameters = []