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