has_many с двумя has_one's - PullRequest
0 голосов
/ 28 июля 2011

У меня есть пользовательская модель, у которой есть родители.Я хочу, чтобы эта пользовательская модель имела одного отца и одну мать.

Итак, мой класс Parent принадлежит пользователю

В настоящее время у меня есть

class User < ActiveRecord::Base
  has_many :parents

  has_one :father, :class_name => 'Parent', :foreign_key => 'user_id', :conditions => {:type => 'male'}
  has_one :mother, :class_name => 'Parent', :foreign_key => 'user_id', :conditions => {:type => 'female'}
end

class Parent < ActiveRecord::Base
  belongs_to :user
end

Проблема в моем контроллере.

...
def edit
  @user = User.find(params[:id])
  @user.mother = Parent.new(:type => 'female')
  @user.father = Parent.new(:type => 'male')
...

Когда я перехожу к редактированию, он создает и выбрасывает двух родителей в базу данных, даже не изменив ничего в форме.Например, когда я нажимаю кнопку «Изменить» для пользователя, я перехожу на страницу редактирования.Когда я просматриваю базу данных, они уже созданы.

Моя форма выглядит следующим образом:

= form_for @user do |f|
  = f.fields_for :father do |father_form|
    etc...
  = f.fields_for :mother do |mother_form|
    etc...

Я пытался сделать что-то одно в строках этого в моем контроллере:

...
@user.parents.build(:type => 'male')
@user.parents.build(:type => 'female')
...

Но форма не отображается.

Любая помощь будет принята с благодарностью.

1 Ответ

3 голосов
/ 28 июля 2011

Попробуйте использовать

@user.build_father(:type => 'male')
@user.build_mother(:type => 'female')

вместо

@user.mother = Parent.new(:type => 'female')
@user.father = Parent.new(:type => 'male')

в вашем действии

...