我有常驻模型
class Resident < ActiveRecord::Base
has_one :user
end
和用户模型
class User < ActiveRecord::Base
belongs_to :resident
end
我想从 Resident 的 roll_number 属性创建用户。我有一个表单,它要求用户输入一些值roll_number包括字段,如果卷号与 Resident 表的roll_number属性匹配,则创建 User 对象。
我们已经在管理员添加的数据库中有居民(有学生roll_numbers住在宿舍的学生名单)。现在,当学生使用我们的注册表单在我们的应用程序中注册时,表单仅要求输入电子邮件,密码和roll_number。如果roll_number与现有驻留表的roll_number匹配,则会创建用户。
用户表的属性
ID:自动生成
roll_number:字符串
电子邮件:字符串
密码:字符串
resident_id:驻留表中的引用
驻留表的属性
ID:自动生成
roll_number:字符串
名称:字符串
这样做
def create
resident = Resident.find_by(roll_number: user_params[:roll_number])
if resident.present?
@user = resident.create_user(user_params)
if @user.save
@user.send_activation_email
UserMailer.account_activation(@user).deliver_now
flash[:info] = "Please check your email to activate your account."
redirect_to root_url
else
render 'new'
end
else
flash[:info] = "Please enter a correct roll number."
redirect_to root_path
end
end
您需要检查如何从参数访问roll_number
值,我无法弄清楚,因为我不知道您的表单是什么样子的。此外,如果roll_number
不匹配,您还需要处理这种情况。
希望对您有所帮助!
in user.rb
before_create :match_resident
def match_resident
resident = Resident.find_by(roll_number: self.roll_number)
if resident.blank?
raise "Invalid roll number"
end
end
您可以检查和验证常驻的卷号,并在 UsersController#Create 方法中创建用户,例如:
def create
resident = Resident.find_by(params[:user][:roll_number])
if resident.present?
@user = resident.create_user(roll_number: resident.roll_number)
if @user.save
# Handle a successful save.
@user.send_activation_email
UserMailer.account_activation(@user).deliver_now
flash[:info] = "Please check your email to activate your account."
redirect_to root_url
else
render 'new'
end
end
end