在 Rails 中限制用户使用 Devise 仅创建一个配置文件

Limit users to create only one profile with Devise in Rails

我有一个使用设计的用户模型和配置文件模型。

用户 has_one 个人资料 个人资料 belongs_to 用户

如果用户已经有一个配置文件关联到他们尝试创建另一个配置文件时,我该如何抛出错误。

所以如果用户转到示例。com/profiles/new 它会抛出错误

好吧,你可以这样做:

profiles_controller.rb

def new
  if current_user.profile.empty?
    # create profil for user
  else
    # raise error which doesn't make sense or redirect like
    redirect_to user_profile_path
  end
end

@auL5agoi 的回答不会阻止某人访问创建操作。您想 运行 检查这两个操作。

def ProfilesController < ApplicationController
  before_action :check_profile_presence, only: [:new, :create]

  def new
  end

  def create
  end

  private

  def check_profile_presence
    redirect_to user_profile_path if current_user.profile.exists?
  end
end

http://guides.rubyonrails.org/action_controller_overview.html#filters

最好的做法是改变你的模型!这将防止您的数据库出现问题...添加到您的 model/profile.rb.

class Profile < ApplicationRecord 
    belongs_to :user
    validates_uniqueness_of :user_id

    #[... other codes...]
end