【问题标题】:Rails 5: devise invitable invited_by nameRails 5:设计邀请的invited_by名称
【发布时间】:2019-02-17 14:57:27
【问题描述】:

最近我在我的应用程序中安装了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 %>

我想实现这个&lt;%= user.invited_by.fullname %&gt;这可能吗?

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

【问题讨论】:

  • 你能发布你添加devise_invitable相关字段的迁移吗?此外,放置invited_by 关联的User 模型也会有所帮助。
  • 添加了User 模型和migration

标签: ruby-on-rails devise-invitable


【解决方案1】:

我的猜测是,并非所有用户都受到某人的邀请,因此您需要先检查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

【讨论】:

  • 我检查了InvitationsController,有一个错字!谢谢,我已经解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
相关资源
最近更新 更多