尝试创建关联模型的Rails NoMethodError

时间:2012-02-21 18:32:55

标签: ruby-on-rails activerecord

我来自Java / PHP背景,我正在尝试学习Rails,但我发现'常规'的东西真的很棘手(这可能没有帮助我在没有网络访问的情况下主要做这件事火车)。这个让我非常难过 - 我已经阅读了协会基础知识指南和一些教程,但我仍然无法让这个例外消失。

型号:

class JobSeeker < ActiveRecord::Base
  attr_accessible :fullName, :dob, :roleTagline, :expTagline, :phoneNumber,
            :country, :email

  belongs_to :user
end


class User < ActiveRecord::Base
  attr_accessor :password
  attr_accessible :username, :email, :password, :password_confirmation

  # other unrelated stuff ...

  has_one :job_seeker, :dependent => :destroy
end

用户控制器:

class UsersController < ApplicationController

def create
  @user = User.new(params[:user])

  @job_seeker = @user.job_seeker.create(params[:user])
  if @user.save
    sign_in @user
    flash[:success] = "Welcome to the Sample App!"
    redirect_to @user
  else
    @title = "Sign up"
    render 'home/index'
  end
end

例外:

UsersController中的NoMethodError #create

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

问题是零:我认为是NilClass。这就像Rails不知道的那样:job_seeker是求职者或其他什么。我已经尝试将它重命名为阳光下的所有东西(:job_seekers,:jobSeeker等),但我现在有点迷失了。

JobSeeker的数据库表有一个名为user_id的整数列。

我在Windows上使用Rails 3.1。

我确信这很简单,但我真的很感激任何帮助。非常感谢!

1 个答案:

答案 0 :(得分:1)

has_one关联不支持create方法。使用create_association方法,即

@job_seeker = @user.create_job_seeker(params[:user])

<强> PS: 我会重写您的代码,以便在build保存失败时使用create代替JobSeeker来避免孤立User个对象。

def create
  @user = User.new(params[:user])
  @job_seeker = @user.build_job_seeker(params[:user])
  if @user.save

  else

  end
end