Ich habe gekämpft, um meine verschachtelte Form zu erhalten, um die Eingaben der Benutzer zu speichern. Die "äußere" Form speichert die Information perfekt. Der "innere", oder verschachtelte, erstellt ein neues Objekt und übergibt versteckte Feldinformationen, aber alle anderen Werte sind "Null".Rails - Nested Forms erstellt, aber Informationen werden nicht gespeichert
Jede Bestellung hat einen oder mehrere date_orders, und Sie sollten die erste über dieses Formular erstellen können.
Mein Code folgt. Bitte helfen Sie mir, etwas zu finden, das das verursachen könnte. Ich habe StackOverflow ausführlich besucht.
orders_controller.rb
class OrdersController < ApplicationController
def new
@order = Order.new
@order.date_orders.build
end
def create
@order = Order.new(order_params)
@order.date_orders.build
if @order.save
flash[:success] = "Success"
redirect_to current_user
else
render 'new'
end
end
def order_params
params.require(:order).permit(
:user_id, :description, date_order_attributes:
[:id, :order_date, :time_start, :time_end, :order_id])
end
end
order.rb
class Order < ActiveRecord::Base
has_many :date_orders, :dependent => :destroy
accepts_nested_attributes_for :date_orders
end
date_order.rb
class DateOrder < ActiveRecord::Base
belongs_to :order
end
routes.rb -> date_orders ist in den Routen nicht erwähnt. Ist das ein Problem?
Aufträge/new.html.erb
<%= form_for(@order, :html => {:multipart => true}) do |f| %>
<!-- form_for fields FIELDS -->
<%= fields_for :date_orders do |builder| %>
<%= builder.hidden_field :order_id, :value => @order.id %> <- THIS WORKS
<%= builder.label :date %>
<%= builder.date_field :order_date %>
<%= builder.label :starting_time %>
<%= builder.time_field :time_start %>
<%= builder.label :ending_time %>
<%= builder.time_field :time_end %>
<% end %>
<%= f.submit "Request", class: "btn" %>
<% end %>
EDIT: Beispiel für einen Hash, der erstellt wird:
<DateOrder id: 9, order_date: nil, time_start: nil, time_end: nil, order_id: 29, created_at: "2016-04-29 22:43:18", updated_at: "2016-04-29 22:43:18">enter code here`
'@ order.date_orders.build' in der' # create' Aktion ist nicht notwendig. Es erstellt ein neues Objekt von Grund auf, was nicht das ist, was Sie wollen - Sie möchten nur die Benutzereingaben speichern.Können Sie hier ein Beispiel für den 'params'-Hash einfügen, den die' # create'-Aktion nach dem Senden in der UI-Eingabe empfängt, die für Sie nicht richtig funktioniert? – AmitA
Außerdem benötigen Sie das versteckte Feld nicht. – AmitA
Oh, Sie haben einen Tippfehler in der "Genehmigung". Es sollte "date_orders_attributes" im Plural sein. Bitte schauen Sie sich das Serverprotokoll an 'rails s' spuckt aus - alle nicht erlaubten Attribute sollten eine Warnung erhalten. Stellen Sie sicher, dass Sie keine haben. – AmitA