Rails 5: разработайте невидимое имя для приглашения - PullRequest
0 голосов
/ 17 февраля 2019

Недавно я установил devise_invitable в свое приложение, в настоящее время я пытаюсь выяснить, как отобразить приглашение.

На мой взгляд, я пытаюсь получить полное имя пользователя, которыйотправил приглашение.

Я попробовал следующее:

Example.html.erb

<% @users.each do |user| %>
 <%= user.fullname %> # Gives me the name of the user
 <%= user.invited_by %> # Gives me ActiveRecord Association
 <%= user.invited_by.fullname %> # Gives me an undefined method error
<% end %>

Я хотел бы добиться этого <%= user.invited_by.fullname %> возможно ли это?

Миграция для devise_invitable

class DeviseInvitableAddToUsers < ActiveRecord::Migration[5.2]
  def up
    change_table :users do |t|
      t.string     :invitation_token
      t.datetime   :invitation_created_at
      t.datetime   :invitation_sent_at
      t.datetime   :invitation_accepted_at
      t.integer    :invitation_limit
      t.references :invited_by, polymorphic: true
      t.integer    :invitations_count, default: 0
      t.index      :invitations_count
      t.index      :invitation_token, unique: true # for invitable
      t.index      :invited_by_id
    end
  end

  def down
    change_table :users do |t|
      t.remove_references :invited_by, polymorphic: true
      t.remove :invitations_count, :invitation_limit, :invitation_sent_at, :invitation_accepted_at, :invitation_token, :invitation_created_at
    end
  end
end

Модель пользователя

class User < ApplicationRecord

  devise :invitable, :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable,
         :confirmable, :omniauthable

  validates :fullname, presence: true, length: { minimum: 4 }
  validates_acceptance_of :terms_of_service

  has_many :services
  has_many :reservations
  has_many :articles
  has_many :lists
end

1 Ответ

0 голосов
/ 17 февраля 2019

Я предполагаю, что не все ваши пользователи приглашены кем-то, поэтому вам нужно проверить, присутствует ли invited_by первым:

<% @users.each do |user| %>
  <%= user.fullname %>
  <% if user.invited_by.present? %>
    <%= user.invited_by %>
    <%= user.invited_by.fullname %>
  <% end %>
<% end %>

Также при отправке приглашения убедитесь, что выПередача, какой пользователь отправляет приглашение, так как этот параметр является необязательным:

User.invite!({:email => "new_user@example.com"}, current_user) # current_user will be set as invited_by
...