Rails NoMethodError пытается создать связанную модель - PullRequest
0 голосов
/ 21 февраля 2012

Я из среды 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

Исключение:

NoMethodError в UsersController # create

неопределенный метод `create 'для nil: NilClass

Проблема в ноле: NilClass, я думаю.Как будто Rails не знает: job_seeker - это JobSeeker или что-то в этом роде.Я попытался переименовать его на все под солнцем (: job_seekers,: jobSeeker и т. Д.), Но я немного растерялся.

В таблице базы данных для JobSeeker есть целочисленный столбец с именем user_id.

Я использую Rails 3.1 для Windows.

Я уверен, что это что-то простое, но я очень признателен за любую помощь.Большое спасибо!

1 Ответ

1 голос
/ 21 февраля 2012

Ассоциация 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...