[RUBY] Les pièges d'Active Hash

Aperçu

Cette fois, j'étais accro à l'écueil en appelant les données stockées dans Active Hash pour l'édition du produit, je vais donc les partager.

J'ai essayé diverses recherches dans qiita, mais je n'ai pas pu le résoudre et j'ai été submergé ...

Détails d'implémentation

Implémentez la fonction d'édition avec l'action d'édition pour l'élément qui a été répertorié en enregistrant toutes les données une fois.

Le fait est que lorsque vous passez à l'écran d'édition, les données initialement enregistrées sont enregistrées sans être réinitialisées.

Il n'y a pas de problème si la description d'appel du fichier de vue et l'association du modèle sont correctement liées, mais j'ai fermement commis une erreur.

Solution

Permettez-moi de commencer par la solution.

Lors de l'implémentation d'une fonction comme celle-ci, le nom de colonne des données dans Active Hash est xxx_id Disons.

Par exemple, les catégories et les préfectures de source de livraison sont des données fixes, alors décrivez-les dans Active Hash. Ici, lors de l'association avec la colonne item, définissons-la fermement comme category_id ou prefecture_id.

Au contraire, lors de la formation d'une association avec un modèle, Cela ressemble à appartient_to_active_hash: catégorie, et vous n'avez pas besoin d'écrire _id.

Le code est résumé ci-dessous, j'espère donc que vous le comprenez ici.

code

models/item.rb


---réduction---
extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to_active_hash :category
  belongs_to_active_hash :condition
  belongs_to_active_hash :postage_type
  belongs_to_active_hash :prefecture
  belongs_to_active_hash :preparation_days
---réduction---

ruby:views/edit.html.erb


<div class="items-detail">
      <div class="weight-bold-text">Détails du produit</div>
      <div class="form">
        <div class="weight-bold-text">
Catégorie
          <span class="indispensable">Obligatoire</span>
        </div>
        <%= f.collection_select(:category_id, Category.all, :id, :name, {}, {class:"select-box", id:"item-category"}) %>
        <div class="weight-bold-text">
État du produit
          <span class="indispensable">Obligatoire</span>
        </div>
        <%= f.collection_select(:condition_id, Condition.all, :id, :name, {}, {class:"select-box", id:"item-sales-status"}) %>
      </div>
    </div>

Le fichier de migration est le suivant. Veuillez noter que le nom de la colonne a _id.

○○_create_items.rb



class CreateItems < ActiveRecord::Migration[6.0]
  def change
    create_table :products do |t|
      t.string :name, null: false
      t.text :explanation, null: false
      t.integer :category_id, null: false
      t.integer :condition_id, null:false
      t.integer :postage_type_id, null:false
      t.integer :prefecture_id, null:false
      t.integer :preparation_days_id, null:false
      t.integer :value, null:false
      t.references :user, foreign_key: true
      t.timestamps
    end
  end
end

finalement

J'étais submergé sans me rendre compte que le nom de la colonne devait avoir _id. Vous pouvez bien comprendre cette théorie en jouant avec la console, mais j'espère que cela aidera le même débutant qui n'est toujours pas bon en résolution d'erreur et qui est en difficulté.

Recommended Posts

Les pièges d'Active Hash
Utilisation de Active Hash
[Spring] Pièges de BeanUtils.copyProperties
[Rails] À propos du hachage actif
[Rails] Présentation de Active Hash
NextInt () → nextLine () pièges
Pièges subtils de Lombok
Conception de table (en utilisant Active Hash)
gem active_hash À propos du hachage actif
Les pièges de JAX-RS WebTarget.queryParam ()
À propos du comportement de ruby Hash # ==
Hacher
Extraction du double hash "ruby" * Avis
[Java] Référence / mise à jour d'Active Directory
J'ai essayé d'expliquer Active Hash