[RUBY] Comment enregistrer dans plusieurs tables avec une seule entrée

[Résumé] ◀ ︎ Écrivez d'abord à partir d'ici

1. Conclusion </ b>

2. Qu'est-ce qu'un objet Form? </ B>

3. Comment utiliser </ b>

4. Ce que j'ai appris d'ici </ b>

  1. Conclusion

Utilisez objet formulaire </ b>!


2. Qu'est-ce qu'un objet Form?

C'est un moyen d'enregistrer sur plusieurs tables à la fois! Normalement, vous devez créer un fichier de migration de contrôleur et de modèle pour la table que vous souhaitez enregistrer. Dans ce cas, vous pouvez facilement le faire en créant un seul fichier avec le modèle!


3. Comment utiliser

❶ Créez un dossier dédié à l'objet de formulaire dans l'application et un fichier dedans. Et écrivez comme suit. Cette fois, je veux refléter les informations et l'adresse achetées dans la base de données, donc j'utiliserai sellitem_address!

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 est le nouvel utilisateur enregistré, : buy_item_id est l'article à vendre.

include En décrivant ActiveModel :: Model et en l'incluant, vous pouvez le traiter comme un modèle et décrire la validation ici!

attr_accessor est une méthode qui vous permet de changer la description à l'intérieur d'une méthode lorsqu'elle est en dehors de la méthode! En d'autres termes, il peut être traité comme une variable d'instance, et le getter et le setter sont traités en interne!

❷ Saisissez les informations relatives au modèle que vous souhaitez utiliser.

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

En faisant cela, nous avons défini les colonnes qui peuvent être enregistrées dans la base de données! user_id buy_item_id est J'ai déjà défini l'identifiant de l'utilisateur et l'identifiant de buy_item, je veux donc extraire chaque identifiant tel quel!

❸ Réglez pour indiquer au contrôleur d'enregistrer les informations saisies dans la vue dans le DB.

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

Dans la méthode sell_item_params, les informations définies dans le modèle sont décrites et résumées sous la forme sell_item_params lors de leur enregistrement. Ceci est très utile car il déterminera dans quelle table chaque colonne est stockée! Le nombre de descriptions à lire étant réduit, il est clair sans imposer une charge à l'opération!


4. Ce que j'ai appris d'ici

À l'origine, j'ai essayé de créer une table pour stocker le contrôleur, le modèle et le fichier de migration, et de le lier à la vue. De plus, il est nécessaire d'indiquer à chaque contrôleur dans chaque partie d'entrée s'il doit coopérer avec chaque contrôleur. Il y a de fortes chances qu'une erreur se produise même dans la partie extensible. Cette méthode améliore la maintenabilité et la lisibilité, et n'impose pas de charge sur l'opération plutôt que de donner des instructions à chaque contrôleur!


Recommended Posts