用户有一个个人资料。配置文件属于用户。查询似乎在postgres中工作,但我没有让关联在视图中正常工作。以下是查询结果:
User Load (0.4ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = 5 ORDER BY "users"."id" ASC LIMIT 1
Profile Load (0.3ms) SELECT "profiles".* FROM "profiles" WHERE "profiles"."user_id" = $1 LIMIT 1 [["user_id", 5]]
以下是用户和个人资料的两种模式:
用户:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
has_one :profile, dependent: :destroy
accepts_nested_attributes_for :profile, allow_destroy: true
end
资料:
class Profile < ActiveRecord::Base
belongs_to :user, polymorphic: true
end
控制器......
用户:
class UsersController < ApplicationController
def index
@profiles = Profile.all
@users = User.all.order(:id)
User.joins(:profile)
end
private
def set_user
@user = User.find(params[:id])
end
end
资料:
class ProfilesController < ApplicationController
before_action :set_profile, only: [:show, :edit, :update, :destroy]
# GET /profiles
# GET /profiles.json
def index
@profiles = Profile.all
end
# GET /profiles/1
# GET /profiles/1.json
def show
end
# GET /profiles/new
def new
@profile = Profile.new
end
# POST /profiles
# POST /profiles.json
def create
@profile = Profile.new(profile_params)
respond_to do |format|
if @profile.save
format.html { redirect_to @profile, notice: 'Profile was successfully created.' }
format.json { render :show, status: :created, location: @profile }
else
format.html { render :new }
format.json { render json: @profile.errors, status: :unprocessable_entity }
end
end
end
private
def set_profile
@profile = Profile.find(params[:id])
end
def profile_params
params.require(:profile).permit(:user_id)
end
端
最后在/ users / index视图中:
<%= user.profile.user_id %>
但是当我尝试渲染视图时,收到以下错误:
未定义的方法`user_id&#39;为零:NilClass
我感谢任何帮助。
答案 0 :(得分:1)
如果你真的不需要关联是多态的,那么你应该从Profile
模型中删除它。
class Profile < ActiveRecord::Base
belongs_to :user
end
但是如果你确实需要关联是多态的,那么你需要改变User
模型。
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
has_one :profile,
dependent: :destroy,
as: user
accepts_nested_attributes_for :profile, allow_destroy: true
end
您还需要在user_type
模型中添加Profile