将用户标识链接到配置文件模型 - Ruby on Rails

时间:2015-06-07 09:31:29

标签: ruby-on-rails ruby model devise scaffolding

我有一个基本的rails应用程序,其中包含设计设置和使用脚手架生成的配置文件模型。 Profile模型是用户在注册后添加自己的详细信息的地方。一切正常,除了一个问题:在用户创建配置文件后,新的配置文件被创建,但它没有链接到该用户ID。我已生成迁移以将user_id添加到配置文件。如何将用户创建的配置文件保存并链接到当前登录的用户?

这是我目前的代码:

配置文件控制器:

class ProfilesController < ApplicationController
  before_action :authenticate_user!
  before_action :set_profile, only: [:show, :edit, :update, :destroy]

respond_to :html

def index
  @profiles = Profile.all
  respond_with(@profiles)
end

def show
  @profile = Profile.find(params[:id])
  respond_with(@profile)
end

def new
  @profile = Profile.new
  respond_with(@profile)
end

def edit
end

def create
  @profile = Profile.new(profile_params)
  @profile.save
  respond_with(@profile)
end

def update
  @profile.update(profile_params)
  respond_with(@profile)
end

def destroy
  @profile.destroy
  respond_with(@profile)
end

private
  def set_profile
    @profile = Profile.find(params[:id])
 end

def profile_params
  params.require(:profile).permit(:name, :civil, :email, :level, :employment_date, :mobile, :folder, :title, :internal, :nationality, :vacation, :work_email, :experience)
end
end

个人资料模型:

class Profile < ActiveRecord::Base
    belongs_to :user
    validates_associated :user
end

用户模型:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_one :profile
end

1 个答案:

答案 0 :(得分:3)

只要您使用devise,就应该这样简单:

class ProfilesController < ApplicationController
  def create
    @profile = Profile.new(profile_params)
    @profile.user_id = current_user.id
    @profile.save
    respond_with(@profile)
  end
end

Devise为您创建帮助方法。检查其docs page

相关问题