在我的应用中,我有两种类型的用户:students
和companies
在注册过程中,我使用邪恶的宝石管理,要求用户根据他选择的帐户类型(学生或公司)填写数据。
例如,学生必须填写他的大学,公司必须填写雇主的数量
注册过程完成后,一切都很好,但不知怎的,我无法访问选择帐户类型2的用户数据 - 公司。
数据存储在两个分离的相关模型中:
对于学生:accountinfo
(我知道它违反惯例,应该有名称account_info)
对于公司:accountinfos_company
(我知道,奇怪的多元化..但它确实有诀窍而且我不会被它混淆)
一切都适合学生。我能够填写数据,并且数据在嵌套表单中正确保存。同样适用于公司,但不幸的是我无法在我的应用程序中输出accountinfos_company
的数据。我能做的就是例如:
@user.accountinfo.description
对于学生帐户。但如果我尝试:
@user.accountinfos_company.description
输出失败并显示错误
undefined method `accountinfos_company' for #<User::ActiveRecord_Relation:0x007fc1851e6e20>
SOMEHOW我能够通过控制台输出特定用户的数据,如:User.last.accountinfos_company.description
。我复制了我为第一个关联模型所做的每一步,数据得到了正确的保存,但我无法在应用程序中访问它。
我认为这可能是缺少的东西,某些定义或者像这样,但据我所知,一切都很好。
users_controller.rb (用户关联内容在另一个控制器中创建)
class UsersController < ApplicationController
before_action :authenticate_user!
def index
redirect_to root_path
end
def create
@user = User.create( user_params )
end
def show
@user = User.find(params[:id])
if @user.not_complete?
redirect_to user_steps_path
else
render 'show'
end
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
# might be the right way?
@user.update(user_params)
if @user.update(user_params)
redirect_to User.find(params[:id]), notice: 'Profil bearbeitet.'
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, :accounttype,
:accountinfo, :accountinfos_company, :profile_image, :active, accountinfo_attributes:[:id], accountinfos_company_attributes:[:id])
end
end
user_steps_controller.rb
class UserStepsController < ApplicationController
include Wicked::Wizard
steps :welcome, :info
before_action :authenticate_user!
def show
@user = current_user
render_wizard
end
def create
@user = current_user
if @user.accounttype == 1
@accountinfo = @user.accountinfo.create(user_params)
elsif @user.accounttype == 2
@accountinfos_company = @user.accountinfos_company.create(user_params)
end
end
def update
@user = current_user
@user.update(user_params)
render_wizard @user
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, :accountinfo, :accountinfos_company,:profile_image, :active, accountinfo_attributes:[:id, :city, :competence, :description, :university], accountinfos_company_attributes:[:id, :city, :company_type, :description, :company_name, :employer_amount])
end
private
def redirect_to_finish_wizard_path
redirect_to root_path, notice: "Danke für deine Zeit!"
end
end
user.rb
class User < ApplicationRecord
has_one :accountinfo
has_one :accountinfos_company
has_many :offer_posts
has_many :search_posts
accepts_nested_attributes_for :accountinfo, update_only: true
accepts_nested_attributes_for :accountinfos_company, update_only: true
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
validates_presence_of :first_name, :last_name, :email, :accounttype
end
accountinfo.rb和accountinfos_company.rb
belongs_to :user
我不知道我是否有错过的东西,但是。 如果你能帮助我,我会很高兴。