2012-01-14 1 views
0

Я установки трех моделей со следующими ассоциациями.build метод не создает ассоциации в соединительной таблице

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 

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

Я попробовал его в консоли приложений, и он создает связь просто отлично.

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

+0

Вы можете показать свой метод current_user? – Msencenb

+0

Я использую devection –

+0

Можете ли вы показать журнал того, что происходит, когда происходит действие сотворения? – Msencenb

ответ

0

две вещи: Если schools ассоциация :throughhas_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. Если вы помните об этом, все должно быть в порядке.

1

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

+0

Пробовал это уже, до сих пор не повезло в ассоциации. –

Смежные вопросы