Frage

Ich erstelle eine Rails -Anwendung und ich habe ein bisschen einen Haken getroffen. Ich möchte ein Formular "Neuer Datensatz für DataType1 erstellen", das nicht nur eine neue Zeile für DataType1 erstellt, sondern auch bis zu vier neue Zeilen für DataType2 einfügt.

Ich weiß alles über fields_for, aber mein Problem ist, dass ich bis zu vier DataType2s einreichen muss, und die einzige Verbindung, die sie für den DataType1 benötigen, ist, dass sie über ein Feld in DataType2 referenziert werden.

Hier ist die vereinfachte Datenbank:

create_table :data_type_1 do |t|
  t.string     :title
  t.text       :body

  t.timestamps
end

create_table :data_type_2 do |t|
  t.belongs_to :parent

  t.timestamps
end

Jetzt habe ich die Beziehungen aufgebaut und alles; Das ist nicht das Problem. Das Problem ist, dass ich einfach nicht herausfinden kann, wie die Parameter für die DataType2s mit den Params für den neuen DataType1 übergeben werden. Sobald mir jemand zeigt, wie ich das machen soll, kann ich die neuen Datentypen2s einrichten, um den neuen DataType1 ziemlich einfach mit dem neuen DataType1 zu verbinden.

Folgendes habe ich im Moment für die Form:

<% form_for(@data_type_1) do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </p>

  # Etc...

  <p>
    # New items need to be iterated here
    # DataType2[1]: [         ]
    # DataType2[2]: [         ]
    # DataType2[3]: [         ]
    # DataType2[4]: [         ]
    # (Note that these numbers are just examples.)
  </p>

  <p>
    <%= f.submit "Create" %>
  </p>
<% end %>

Ich bin relativ neu in Rails und ich entschuldige mich, wenn diese Frage ein bisschen streift.

War es hilfreich?

Lösung

Dies Railscast spricht über das Einfügen von Listen von "DataType2" in "DataType1". Die interessanten Teile sind diese

app/views/projects/_form.html.erb

  <% for task in @project.tasks %>
    <% fields_for "project[task_attributes][]", task do |task_form| %>
      <p>
        Task: <%= task_form.text_field :name %>
      </p>
    <% end %>
  <% end %>

app/models/project.rb

def task_attributes=(task_attributes)
  task_attributes.each do |attributes|
    tasks.build(attributes)
  end
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top