[RUBY] Essayez d'utiliser simple_form / modifier même les modèles enfants

Aperçu

simple_form est un joyau qui crée automatiquement des formulaires haute performance. https://github.com/heartcombo/simple_form Non seulement il crée un formulaire, mais il affiche également automatiquement les messages d'erreur et les noms d'éléments.

Cette fois, c’est un simple projet de rails avec deux tables. J'ai essayé d'utiliser simple_form

image.png

la mise en oeuvre

Tout d'abord, implémentez uniquement le modèle utilisateur d'implémentation le plus simple

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

Exécutez le fichier de migration suivant. `` `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

Écrivez simple_form dans le fichier de vue (nouveau). C'est presque une copie de me lire

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 %>

Le formulaire est maintenant affiché. Le résultat de l'accès à localhost: 3000 / users / new est le suivant. image.png

Les éléments pour lesquels la validation de présence est définie sont automatiquement affichés car ils ne peuvent pas être vides.

De plus, simple_form évalue l'email et l'url à partir du nom de la colonne, et chacun d'eux effectue la validation optimale. image.png

image.png

La conception de la bulle est également générée par simple_form sans autorisation.

De plus, comme vous pouvez le voir en regardant les éléments de date et d'âge, le format d'entrée changera arbitrairement en fonction du type.

C'est juste un exemple Différents modèles d'entrée tels que la couleur et le pays sont disponibles. (Il est écrit en reademe) Comment utiliser simple_form est comme ça.

Si vous souhaitez modifier le modèle enfant ensemble

Vous pouvez modifier le modèle enfant associé à l'utilisateur à partir du modèle utilisateur. Il est utilisé lorsque vous souhaitez éditer en même temps sur une page où le modèle utilisateur est le principal.

Cette fois, nous allons préparer un modèle enfant appelé user_property. Pas l'action de création de user_properties_controller Rendre possible l'édition avec create of users_controller. (idem pour la mise à jour

Il vous permet également de combiner les boutons d'envoi en un seul.

Vous trouverez ci-dessous le fichier qui a changé par rapport à la dernière fois.

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

Exécutez le fichier de migration suivant. `` `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 s'écrit comme suit. ---- user_proiperty ----- Les éléments suivants ont été ajoutés. Utilisez 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 %>

Le résultat est le suivant Deux éléments pour user_property ont été ajoutés. C'est tout. image.png

Similaire à l'utilisateur, une erreur de validation est affichée image.png

c'est tout

Recommended Posts

Essayez d'utiliser simple_form / modifier même les modèles enfants
Essayez d'utiliser libGDX
Essayez d'utiliser Maven
Essayez d'utiliser powermock-mockito2-2.0.2
Essayez d'utiliser GraalVM
Essayez d'utiliser jmockit 1.48
Essayez d'utiliser SwiftLint
Essayez d'utiliser Log4j 2.0
Essayez d'utiliser le Framework Axon
Essayez d'utiliser l'API REST de JobScheduler
Essayez d'utiliser la WhiteBox de PowerMock
Essayez d'utiliser Talend Part 2
Essayez d'utiliser Talend Part 1
Essayez d'utiliser la liste F #
Essayez d'utiliser la méthode each_with_index
Essayez d'utiliser Spring JDBC