[RUBY] So speichern Sie mit einer Eingabe in mehreren Tabellen

[Zusammenfassung] ◀ ︎ Schreiben Sie zuerst von hier aus

1. Schlussfolgerung </ b>

2. Was ist ein Formularobjekt? </ B>

3. Verwendung von </ b>

4. Was ich hier gelernt habe </ b>

  1. Fazit

Verwenden Sie Formularobjekt </ b>!


2. Was ist ein Formularobjekt?

Auf diese Weise können Sie in mehreren Tabellen gleichzeitig speichern! Normalerweise müssen Sie eine Controller- und Modellmigrationsdatei für die Tabelle erstellen, die Sie speichern möchten. In diesem Fall können Sie dies einfach tun, indem Sie eine einzelne Datei mit dem Modell erstellen!


3. Verwendung

❶ Erstellen Sie einen Ordner für das Formularobjekt in der App und eine Datei darin. Und schreibe wie folgt. Dieses Mal möchte ich die gekauften Informationen und Adressen in der Datenbank wiedergeben, also werde ich sellitem_address verwenden!

app/forms/sell_item_address.rb


class SellitemAddress

 include ActiveModel::Model
 attr_accessor :postal_code, :shipping_orig_id, :city, :address_other, :building_name, 
               :telephone_num, :sell_item_id, :user_id, :buy_item_id

end

: user_id ist der neu registrierte Benutzer, : buy_item_id ist der Artikel zum Verkauf.

include Indem Sie ActiveModel :: Model beschreiben und einschließen, können Sie es wie ein Modell behandeln und die Validierung hier beschreiben!

attr_accessor ist eine Methode, mit der Sie die Beschreibung innerhalb einer Methode ändern können, wenn sie sich außerhalb der Methode befindet! Mit anderen Worten, es kann als Instanzvariable behandelt werden, und der Getter und der Setter werden intern verarbeitet!

❷ Geben Sie Informationen für das Modell ein, das Sie verwenden möchten.

app/forms/sellitem_address.rb


 def save
    sell_item = SellItem.create(user_id: user_id, buy_item_id: buy_item_id)
    Address.create(postal_code: postal_code, shipping_orig_id: shipping_orig_id, city: city, address_other: address_other, building_name: building_name,telephone_num: telephone_num, sell_item_id: sell_item.id )
  end

Auf diese Weise haben wir die Spalten festgelegt, die in der DB gespeichert werden können! user_id buy_item_id ist Ich habe bereits die ID des Benutzers und die ID von buy_item festgelegt, daher möchte ich jede ID so extrahieren, wie sie ist!

❸ Legen Sie fest, dass der Controller angewiesen wird, die in der Ansicht in der Datenbank eingegebenen Informationen zu registrieren.

sell_items_controller


def create
    @sell_item = SellitemAddress.new(sell_item_params)
    if @sell_item.save
      return redirect_to root_path
    else
      render 'sell_items/index'
    end

  private

  def sell_item_params
    params.permit(:postal_code, :shipping_orig_id, :city, :address_other, :building_name, :telephone_num, :user_id, :buy_item_id).merge(user_id: current_user.id)
  end
 end

In der Methode sell_item_params werden die im Modell festgelegten Informationen beim Speichern als sell_item_params beschrieben und zusammengefasst. Dies ist sehr nützlich, da es bestimmt, in welcher Tabelle jede Spalte gespeichert ist! Da die Anzahl der zu lesenden Beschreibungen reduziert ist, ist klar, ohne den Betrieb zu belasten!


4. Was ich von hier gelernt habe

Ursprünglich habe ich versucht, eine Tabelle zum Speichern des Controllers, des Modells und der Migrationsdatei zu erstellen und diese mit der Ansicht zu verknüpfen. Außerdem muss jeder Controller in jedem Eingangsteil angewiesen werden, mit jedem Controller zusammenzuarbeiten. Es besteht eine gute Chance, dass auch im erweiterbaren Teil ein Fehler auftritt. Diese Methode verbessert die Wartbarkeit und Lesbarkeit und belastet den Betrieb nicht, sondern gibt jedem Controller Anweisungen!


Recommended Posts