如何从 Rails 中的关联模型创建对象



我有常驻模型

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

最新更新