我来自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。
我确信这很简单,但我真的很感激任何帮助。非常感谢!
答案 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