错误:nil的未定义方法`attach_resumes':NilClass

时间:2016-01-20 06:01:50

标签: ruby-on-rails ruby-on-rails-4 relationship

我有用户表我需要用户在attach_resumes表上创建一个CV,我已创建关系但显示此错误:

未定义的方法`attach_resumes'代表nil:NilClass

在我的代码下面我错了什么?

用户模型

class User< ActiveRecord::Base
  has_one :attach_resumes
end

attach_resumes模型

class AttachResume < ActiveRecord::Base
  belongs_to :user
end

attach_resumes控制器

 def new
  @attach_resume = AttachResume.new
 end

def create
  params.permit!
    if @attach_resume =  @user.attach_resumes.create(params[:attach_resume])
   flash[:notice] = "Attached Resume successfully"
   render "attachCV"
  else
    render "attachCV"
    flash[:warning] = "Please Attach Only PDF"
  end
end

如果有人找到解决方案,那将是一件好事

4 个答案:

答案 0 :(得分:3)

模型应该是:

class User< ActiveRecord::Base
  has_one :attach_resume
end

请注意:attach_resume没有s

因此,当您在控制器中创建attach_resume时将是:

@user.create_attach_resume(params[:attach_resume])

答案 1 :(得分:1)

也许您的@user未经过验证

用户验证过程:

helper / applecation_helper

def user
  @user ||= User.find_by(user_id: session[:user_id])
end

&安培;然后使用@user

希望能理解这个

答案 2 :(得分:0)

正如它指定的那样,你在一个零级别上调用attach_resumes。检查@user是否包含该部分的任何值。

另外,在旁注: 您正在建立一对一的关系,但在模型和控制器中使用一对多复数。如果您确实想要一对一,请将模型中的行更改为

has_one :attach_resume

并且在您的控制器中

@user.attach_resume.create(params[:attach_resume])

如果您想拥有一对多,请将关系更新为

has_many :attach_resumes

答案 3 :(得分:0)

您的关联是错误的。它必须是has_one :attach_resume,因为has_one是单数。因此,您必须将attach_resume模型定义为单数。

class User< ActiveRecord::Base
  has_one :attach_resume
end

您可以推荐关联here for your situation.,您可以参考Active Record Association here.