Durch Hinzufügen von Tags, die sich auf has_many beziehen, zu User of Devise erstellen wir eine Funktion, um Tags wie Qiita zu folgen.
Devise hat standardmäßig keine Benutzernamensspalte. Im Internet gibt es viele Informationen zum Hinzufügen einer Benutzernamensspalte. Um jedoch die Möglichkeit zu schaffen, Tags zu folgen, müssen Sie Tags hinzufügen, bei denen es sich um eine has_many-Beziehung handelt. Dazu gibt es nicht viele Informationen. Deshalb habe ich die Methode zusammengefasst.
Sie können das Rails-Projekt hier herunterladen. https://github.com/GuiltyWorks/DeviseWithTags
bin/rails g migration add_name_to_users name:string
bin/rails g model tag
bin/rails g model user_tag_relation
Erstellen Sie eine Migrationsdatei, ein Tag-Modell und ein User-Tag-Relation-Modell, die dem Benutzer einen Namen hinzufügen.
db/migrate/20200716151945_add_name_to_users.rb
class AddNameToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :name, :string
end
end
Es ist nicht notwendig, aber ich werde eine Spalte mit dem Benutzernamen hinzufügen, weil es eine große Sache ist.
db/migrate/20200716152422_create_tags.rb
class CreateTags < ActiveRecord::Migration[5.2]
def change
create_table :tags do |t|
t.string :name, null: false, unique: true
t.timestamps
end
end
end
Erstellen Sie eine Tag-Tabelle wie oben.
db/migrate/20200716152440_create_user_tag_relations.rb
class CreateUserTagRelations < ActiveRecord::Migration[5.2]
def change
create_table :user_tag_relations do |t|
t.references :user, foreign_key: true
t.references :tag, foreign_key: true
t.timestamps
end
end
end
Erstellen Sie eine Zwischentabelle, die Benutzer mit Tags verknüpft.
app/models/user.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :name, { presence: true }
validates :email, { presence: true, uniqueness: true }
has_many :user_tag_relations, dependent: :delete_all
has_many :tags, through: :user_tag_relations
end
Beschreiben Sie has_many im Benutzermodell.
app/models/user_tag_relation.rb
class UserTagRelation < ApplicationRecord
belongs_to :user
belongs_to :tag
end
Beschreiben Sie Gehört zu im UserTagRelation-Modell.
app/models/tag.rb
class Tag < ApplicationRecord
validates :name, { presence: true, uniqueness: true }
has_many :user_tag_relations, dependent: :delete_all
has_many :users, through: :user_tag_relations
end
Beschreiben Sie has_many im Tag-Modell.
app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
devise_parameter_sanitizer.permit(:sign_in, keys: [:name])
devise_parameter_sanitizer.permit(:account_update, keys: [:name, tag_ids: []])
end
end
Registrieren Sie den Namen und die tag_ids in Devise.
config/initializers/devise.rb
config.scoped_views = true
Setzen Sie es auf true anstatt auf false, um die Geräteansicht zu ändern.
ERB:app/views/devise/registrations/new.html.erb
<div class="field">
<%= f.label :name %>
<%= f.text_field :name %>
</div>
Ermöglicht das Festlegen eines Benutzernamens auf dem neuen Registrierungsbildschirm.
ERB:app/views/devise/registrations/edit.html.erb
<div class="field">
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :tag_ids, "Tags you want follow" %>
<%= f.collection_check_boxes :tag_ids, Tag.all, :id, :name do |tag| %>
<div class="form-check">
<%= tag.label class: "form-check-label" do %>
<%= tag.check_box class: "form-check-input" %>
<%= tag.text %>
<% end %>
</div>
<% end %>
</div>
Hier können Sie einen Benutzernamen und ein Tag festlegen, die auf dem Bildschirm mit den Benutzereinstellungen angezeigt werden sollen.
Sie können jetzt Tags in Ihrer bevorzugten Programmiersprache auf dem Bildschirm mit den Benutzereinstellungen folgen.
[* Rails *] Verwendung von Devise (Rails5-Version)
Recommended Posts