可以在控制台中访问关联模型的数据,但不能在应用中访问

时间:2017-12-03 11:08:36

标签: ruby-on-rails ruby model output associations

在我的应用中,我有两种类型的用户:studentscompanies 在注册过程中,我使用邪恶的宝石管理,要求用户根据他选择的帐户类型(学生或公司)填写数据。
例如,学生必须填写他的大学,公司必须填写雇主的数量 注册过程完成后,一切都很好,但不知怎的,我无法访问选择帐户类型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

我不知道我是否有错过的东西,但是。 如果你能帮助我,我会很高兴。

0 个答案:

没有答案