Метод .build не создает ассоциацию в таблице соединений - PullRequest
0 голосов
/ 14 января 2012

У меня есть три настройки моделей со следующими ассоциациями

class User < ActiveRecord::Base
  has_many :faculties
  has_many :schools, :through => :faculties
end

class School < ActiveRecord::Base
  has_many :faculties
  has_many :users, :through => :faculties
end

class Faculty < ActiveRecord::Base
  belongs_to :user
  belongs_to :school
end

, и в моем контроллере я иду, чтобы создать школу и назначить пользователя

class SchoolsController < ApplicationController
  def create
    @school = current_user.schools.build(params[:school])
    ...
  end
end

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

Я попробовал это в консоли приложений, и она отлично строит ассоциацию.

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

Ответы [ 2 ]

1 голос
/ 14 января 2012

Метод построения не сохраняет объект.Вам нужно явно позвонить @ school.save.

0 голосов
/ 14 января 2012

Две вещи: Если ассоциация schools является :through ассоциацией has_many, вам нужно будет выбрать, через какого из родителей существует School.

Так, например, если бы вы вложили School ресурсы в users, как в /users/:id/faculties/:id, вы могли бы создать школу через current_user.faculties.find(params[:faculty_id]).schools.build(params[:school]).save

На основе примера кода:похоже, что основная проблема заключается в том, что синтаксис has_many xxx, :through используется без указания идентификатора записи faculties.Помните две вещи: 1) ActiveRecord изначально не поддерживает составные первичные ключи, и 2) вы должны вызвать #save для связанных записей, созданных с помощью #build.Если вы помните это, у вас все будет хорошо.

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