用户有一个配置文件。配置文件属于用户。该查询似乎在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 %>
但是,当我尝试渲染视图时,出现以下错误:
nil:NilClass的未定义方法`user_id'
感谢您的帮助。
如果您真的不需要关联是多态的,则应将其从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
模型
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句