[RUBY] Ruft Spaltennamen von einer Instanz von Model ab

Ich dachte, es wäre schön, wenn beim Erstellen des Listenbildschirms eine Schlüsselnamenliste zur Anzeige vorhanden wäre.

Verfahren

1. Modellerstellung

Erstellen Sie ein Modell

models/user.rb


class User < ApplicationRecord
  include Table #Wenn Sie es hier einfügen, können Sie es als Instanzmethode verwenden

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

end

2. Erstellen Sie eine Methode, um den Spaltennamen von der Modellinstanz abzurufen

models/concerns/table.rb


module Table
  extend ActiveSupport::Concern

  #Spaltennamen (Symbol) als Array abrufen
  def table_keys
    self.class.column_names.map(&:to_sym).reject { |column| %i[id created_at updated_at].include?(column) }

    #Klicken Sie hier, wenn Sie es als Zeichenfolge erhalten möchten
    # self.class.column_names.reject { |column| %w[id created_at updated_at].include?(column) }
  end

  #Spaltennamen abrufen
  def col_name(column_name)
    self.class.human_attribute_name(column_name)
  end
end
  1. Holen Sie sich "User" von "@ user" usw. mit "self.class"
  2. Rufen Sie die Liste der Spaltennamen mit column_names.map (&: to_sym) ab und konvertieren Sie sie in ein Symbol
  3. reject { |column| %w[id created_at updated_at].include?(column) }Schließen Sie unnötige Spaltennamen in aus

3. Anzeige auf dem Listenbildschirm

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 Keine Daten


Ich konnte es so anzeigen. (Ich benutze Bootstrap) ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554638/22731714-2129-b0bd-89a1-b4aa9048e747.png)

Schließlich

Diese Art von Bildschirm wird häufig für devise und active_admin verwendet, aber es scheint, dass er auch verwendet werden kann, wenn der Schlüssel zur Validierung an die Vorderseite übergeben wird.

Wenn Sie einen Rat haben, zögern Sie bitte nicht, uns zu kontaktieren.

Recommended Posts

Ruft Spaltennamen von einer Instanz von Model ab
Ruft den Objektnamen der vom neuen Operator erstellten Instanz ab
Holen Sie sich "2-4, 7, 9" aus [4, 7, 9, 2, 3]
Wenn Sie sich im Klassennamen verlieren
[JAVA] Nur den Dateinamen abrufen, ausgenommen die Erweiterung
Holen Sie sich Enum, indem Sie sich vom Inhalt zurückziehen
Enum Fehlkonfiguration. Aus irgendeinem Grund kann ich keine Daten aus der von Enum angegebenen Spalte abrufen ...
[Rails] Lassen Sie uns den Schwellenwert für die "Längenprüfung" der Modellvalidierung dynamisch aus Tabelleninformationen abrufen
[Kotlin] Ermittelt den Argumentnamen des Konstruktors durch Reflektion
Holen Sie sich den Anime-Namen für diesen Begriff durch Scraping
Rufen Sie den Namen des Testfalls in der JUnit-Testklasse ab
[Java] So extrahieren Sie den Dateinamen aus dem Pfad
[Ruby on Rails] So ändern Sie den Spaltennamen
[Rails] So ändern Sie den Spaltennamen der Tabelle
Ruby, Nokogiri: Ruft den Elementnamen des ausgewählten Knotens ab
Refactor das Fettmodell
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
So ändern Sie dynamisch den von MyBatis erfassten Spaltennamen
Kommen Sie zu den Abkürzungen aus den fünf Beispielen für kursive Java-Listen
So erhalten Sie die längsten Informationen von Twitter ab dem 12.12.2016
[Grobe Erklärung] Ursachen und Abhilfemaßnahmen dafür, dass der Name nicht aus dem ActiveHash-Modell abgerufen werden kann