build_association работает? - PullRequest
       2

build_association работает?

2 голосов
/ 27 сентября 2011

У меня есть две модели с однозначной ассоциацией.

class User < ActiveRecord::Base
  has_one  :setting
end

class Setting < ActiveRecord::Base
  belongs_to :user
end

Каждая модель имеет множество полей, и пользователь довольно широко используется внешним сервером, не поддерживающим рельсы, поэтому я разделил таблицы.

Я пытаюсь использовать build_association, но все, что я получаю, это неопределенный метод `build_setting 'для nil: NilClass. Я хочу сделать это, потому что я хочу одну форму с полями из обеих моделей для настройки нового пользователя.

В моих пользовательских контроллерах новый метод, который я пытаюсь это:

def new
  @user = User.new
  @setting = @user.setting.build_setting

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @user }
  end
end

Который бросает:

NoMethodError in UsersController#new
  undefined method `build_setting' for nil:NilClass

Почему? Согласно API, это способ сделать это.

Кажется, что это работает, но это не правильный путь (или это?):

def new
  @user = User.new
  @setting = Setting.new
  @user.setting=@setting

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @user }
  end
end

Ответы [ 2 ]

2 голосов
/ 27 сентября 2011

Вам необходимо использовать:

@setting = @user.build_setting

Это после редактирования, поэтому, если вам нравится этот ответ, примите ответ Махеша ниже.

1 голос
/ 27 сентября 2011

В вашей модели пользователя добавьте

class User < ActiveRecord::Base
  has_one  :setting
  validates_associated :setting
end

и затем используйте

@setting = @user.build_setting
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...