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>
Utilisez objet formulaire </ b>!
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!
❶ 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!
À 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