[RUBY] Obtenir les noms de colonnes d'une instance de Model

J'ai pensé que ce serait bien s'il y avait une liste de noms de clé à afficher lors de la création de l'écran de liste.

procédure

1. Création de modèles

Créer un modèle

models/user.rb


class User < ApplicationRecord
  include Table #Si vous l'incluez ici, vous pouvez l'utiliser comme méthode d'instance

  attribute :name
  attribute :email
  attribute :login_id
  attribute :password

end

2. Créez une méthode pour obtenir le nom de la colonne à partir de l'instance de modèle

models/concerns/table.rb


module Table
  extend ActiveSupport::Concern

  #Obtenir le nom de la colonne (symbole) sous forme de tableau
  def table_keys
    self.class.column_names.map(&:to_sym).reject { |column| %i[id created_at updated_at].include?(column) }

    #Cliquez ici si vous souhaitez l'obtenir sous forme de chaîne de caractères
    # self.class.column_names.reject { |column| %w[id created_at updated_at].include?(column) }
  end

  #Obtenir le nom de la colonne
  def col_name(column_name)
    self.class.human_attribute_name(column_name)
  end
end
  1. Obtenez ʻUser from @ useretc. avecself.class`
  2. Récupérez la liste des noms de colonnes avec nom_colonne.map (&: to_sym) et convertissez-la en symbole
  3. reject { |column| %w[id created_at updated_at].include?(column) }Exclure les noms de colonnes inutiles dans

3. Affichage sur l'écran de liste

ruby:views/users/index.html.slim



- if @users.present?
  table.table
    thead
      tr
        - first_user = @users.first
        - first_user.table_keys.each do |key|
          = tag.td first_user.col_name(key)
    tbody
      - @users.each do |user| 
        tr
          - user.table_keys.each do |key|
            = tag.td {|tag| tag.span user.send(key)}
- else
p Aucune donnée


J'ai pu l'afficher comme ça. (J'utilise bootstrap) ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554638/22731714-2129-b0bd-89a1-b4aa9048e747.png)

finalement

Ce type d'écran est souvent utilisé pour devise et active_admin, mais il semble qu'il puisse également être utilisé lors du passage de la clé de validation au recto.

Si vous avez des conseils, n'hésitez pas à nous contacter.

Recommended Posts

Obtenir les noms de colonnes d'une instance de Model
Récupère le nom d'objet de l'instance créée par le nouvel opérateur
Obtenez "2-4, 7, 9" de [4, 7, 9, 2, 3]
Quand tu te perds dans le nom de la classe
[JAVA] Récupère uniquement le nom du fichier, à l'exclusion de l'extension
Obtenez Enum en retirant du contenu
Mauvaise configuration d'énumération. Pour une raison quelconque, je ne peux pas obtenir de données de la colonne spécifiée par Enum ...
[Rails] Obtenons dynamiquement le seuil de validation du modèle "contrôle de longueur" à partir des informations de table
[Kotlin] Récupère le nom de l'argument du constructeur par réflexion
Obtenez le nom d'anime de ce terme en grattant
Obtenez le nom du scénario de test dans la classe de test JUnit
[Java] Comment extraire le nom du fichier du chemin
[Ruby on Rails] Comment changer le nom de la colonne
[Rails] Comment changer le nom de colonne de la table
Ruby, Nokogiri: récupère le nom de l'élément du nœud sélectionné
Refactoriser le modèle Fat
Comment obtenir le nom d'une classe / méthode exécutée en Java
Comment changer dynamiquement le nom de la colonne acquis par MyBatis
Accédez à l'abréviation à partir de 5 exemples de listes Java en italique
Comment obtenir les informations les plus longues de Twitter à partir du 12/12/2016
[Explication approximative] Causes et remèdes pour ne pas pouvoir obtenir le nom du modèle ActiveHash