Ruby on rails 如何从rails中的关联模型生成对象?
我有常驻模型Ruby on rails 如何从rails中的关联模型生成对象?,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,我有常驻模型 类驻留
类驻留
和用户模型
class User < ActiveRecord::Base
belongs_to :resident
end
class用户
我想从常驻者的roll\u number属性创建用户。我有一个表单,要求用户输入一些值,包括roll\u number字段,如果roll\u number与常驻者表的roll\u number属性匹配,则创建用户对象
我们已经在我们的数据库中添加了由管理员添加的住宿者(有住宿宿舍卷号的学生名单)。现在,当学生使用我们的注册表格在我们的申请中注册时,表格只要求提供电子邮件、密码和卷号。如果roll_编号与现有常驻表的roll_编号匹配,则会创建用户
用户表的属性
id:自动生成
卷号:字符串
电子邮件:string
密码:string
常驻\ u id:来自常驻表的引用
常驻表的属性
id:自动生成
卷号:字符串
名称:string您可以这样做
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
您需要检查如何从params访问roll_number
值,我无法理解,因为我不知道您的表单是什么样子。如果卷号
不匹配,您还需要处理该情况
希望有帮助 在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
有一个注册页面,用于用户注册,包含以下字段:卷号、电子邮件、密码、密码确认。现在,当用户输入详细信息时,必须检查卷号是否存在于常驻表中。如果存在,则根据常驻表创建用户。bcz这是一对一的关系。您提供的解决方案是给出错误bcz,您正在查找具有居民id的居民,但用户在注册时没有给出居民id。注册时,他向我们提供的与住户模型相关的卷号是管理员:注册页面:如果住户中没有卷号怎么办?卷号是强制性的。。bcz我们将在学生(在宿舍注册的学生)注册我们的申请时确定他们的身份。。roll_number是用户注册时提供的主要属性。。我们也有在宿舍注册的学生名单,作为管理员创建的常驻表。。仅当用户输入的注册页面中的roll_编号匹配时,才会创建该用户。然后我们在常驻表中有用户的所有详细信息。。我们将使用这些用户的详细信息以供进一步使用!那么,向用户表中添加常驻id是怎么回事。。。那么这两个模型是如何相互关联的呢?当您执行resident.user.new时,它将从resident对象添加resident\u id auto。@Nischaynamdev我已经根据您提供的justPaste链接编辑了我的答案,您可以用我代码中的方法替换您的userscontroller#create方法,它将工作得很好。@Nischaynamdev是并编辑了我只能标一个答案但你们两个给出了相同的答案。。所以我选择了第一个回答的人。。
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