[RUBY] Versuchen Sie es mit simple_form / edit sogar untergeordneten Modellen

Überblick

simple_form ist ein Juwel, das automatisch leistungsstarke Formulare erstellt. https://github.com/heartcombo/simple_form Es wird nicht nur ein Formular erstellt, sondern es werden auch automatisch Fehlermeldungen und Elementnamen angezeigt.

Diesmal ist es ein einfaches Schienenprojekt mit zwei Tabellen. Ich habe versucht, simple_form zu verwenden

image.png

Implementierung

Implementieren Sie zunächst nur das einfachste Implementierungsbenutzermodell

gemfile


gem 'simple_form'

user.rb


class User < ApplicationRecord
  validates :name, presence: true
  validates :email, presence: true
  validates :age, presence: true
end

routes.rb


  resources :users

users_controller.rb


class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      redirect_to user_path(@user)
    else
      render 'users/new'
    end
  end

  private

  def user_params
    params.require(:user).permit(
      :name,
      :email,
      :age,
      :date
    )
  end

Führen Sie die folgende Migrationsdatei aus. `` `Rails db: migrate```

db/migrate/20200906_create_users.rb


class CreateUsers < ActiveRecord::Migration[5.1]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email
      t.integer :age
      t.datetime :date
      t.string :url

      t.timestamps
    end
  end
end

Schreiben Sie simple_form in die Ansichtsdatei (neu). Es ist fast eine Kopie von read me

ruby:app/views/users/new.html.erb


<%= simple_form_for user do |f| %>
  <%= f.input :name %>
  <%= f.input :email %>
  <%= f.input :age, collection: 18..60 %>
  <%= f.input :date %>
  <%= f.input :url %>
  <%= f.button :submit %>  
<% end %>

Das Formular wird jetzt angezeigt. Das Ergebnis des Zugriffs auf localhost: 3000 / users / new lautet wie folgt. image.png

Elemente, für die die Anwesenheitsüberprüfung festgelegt ist, werden automatisch angezeigt, da sie nicht leer sein dürfen.

Darüber hinaus beurteilt simple_form E-Mail und URL anhand des Spaltennamens und führt jeweils die optimale Validierung durch. image.png

image.png

Das Design des Ballons wird auch von simple_form ohne Erlaubnis generiert.

Wie Sie anhand der Datums- und Alterselemente sehen können, wird das Eingabeformat je nach Typ beliebig geändert.

Dies ist nur ein Beispiel Es stehen verschiedene Eingabemuster wie Farbe und Land zur Verfügung. (Es ist in reademe geschrieben) So verwenden Sie simple_form.

Wenn Sie das untergeordnete Modell gemeinsam bearbeiten möchten

Sie können das dem Benutzer zugeordnete untergeordnete Modell im Benutzermodell bearbeiten. Es wird verwendet, wenn Sie gleichzeitig auf einer Seite bearbeiten möchten, auf der das Benutzermodell das Hauptmodell ist.

Dieses Mal bereiten wir ein untergeordnetes Modell mit dem Namen user_property vor. Nicht die Erstellungsaktion von user_properties_controller Ermöglichen Sie das Bearbeiten mit create of users_controller. (Gleiches gilt für das Update

Außerdem können Sie die Senden-Schaltflächen zu einer kombinieren.

Unten finden Sie die Datei, die sich gegenüber dem vorherigen Mal geändert hat.

user_property.rb


class UserProperty < ApplicationRecord
  belongs_to :user

  validates :nickname, presence: true
  validates :hobby, presence: true
end

user.rb


class User < ApplicationRecord
  validates :name, presence: true
  validates :email, presence: true
  validates :age, presence: true

 has_one :user_property
  accepts_nested_attributes_for :user_property
end

users_controller.rb


class UsersController < ApplicationController
  def new
    @user = User.new
  @user.create_user_property(nickname: "takashi", hobby: "yamamoto")
  end

  private

  def user_params
    params.require(:user).permit(
      :name,
      :email,
      :age,
      :date,
       user_property_attributes: %i[
        nickname
        hobby
      ]
    )
  end

Führen Sie die folgende Migrationsdatei aus. `` `Rails db: migrate```

db/migrate/20200906_create_user_property.rb


class CreateUserProperties < ActiveRecord::Migration[5.1]
  def change
    create_table :user_properties do |t|
      t.integer :user_id
      t.string :nickname
      t.string :hobby

      t.timestamps
    end
  end
end

Simple_form wird wie folgt geschrieben. ---- user_proiperty ----- Die folgenden Elemente wurden hinzugefügt. Verwenden Sie simple_field_for.

ruby:app/views/users/new.html.erb


<%= simple_form_for user do |f| %>
  <%= f.input :name %>
  <%= f.input :email %>
  <%= f.input :age, collection: 18..60 %>
  <%= f.input :date %>
  <%= f.input :url %>

-------user_property----------  

  <%= f.simple_fields_for :user_property, user.user_property do |ff| %>
    <%= ff.input :nickname %>
    <%= ff.input :hobby %>
  <% end %>

  <%= f.button :submit %>  
<% end %>

Das Ergebnis ist wie folgt Zwei Elemente für user_property wurden hinzugefügt. Das ist es. image.png

Ähnlich wie beim Benutzer wird ein Validierungsfehler angezeigt image.png

das ist alles

Recommended Posts

Versuchen Sie es mit simple_form / edit sogar untergeordneten Modellen
Versuchen Sie es mit libGDX
Versuchen Sie es mit Maven
Versuchen Sie es mit powermock-mockito2-2.0.2
Versuchen Sie es mit GraalVM
Versuchen Sie es mit jmockit 1.48
Versuchen Sie es mit SwiftLint
Versuchen Sie es mit Log4j 2.0
Versuchen Sie es mit dem Axon Framework
Versuchen Sie es mit der REST-API von JobScheduler
Versuchen Sie es mit der WhiteBox von PowerMock
Versuchen Sie es mit Talend Teil 2
Versuchen Sie es mit Talend Teil 1
Versuchen Sie es mit der F # -Liste
Versuchen Sie es mit der Methode each_with_index
Versuchen Sie es mit Spring JDBC