在 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
我有一个使用设计的用户模型和配置文件模型。
用户 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