Я новичок в Ruby on Rails и отчаянно пытаюсь заставить работать ассоциацию HABTM.У меня есть база данных клиентов, в которой каждый клиент может иметь много контактов.Из представления «показать» клиентов мне нужна ссылка для добавления нового контакта к выбранному клиенту.
Пока у меня есть следующие данные:
models / customer.rb:
class Customer < ActiveRecord::Base
has_and_belongs_to_many :contacts
accepts_nested_attributes_for :contacts, :allow_destroy => true
end
models / contact.rb:
class Contact < ActiveRecord::Base
has_and_belongs_to_many :customers
end
views / Customers / show.html.erb:
<%= link_to 'Add new contact', new_customer_contact_path(@customer) %>
У меня также есть три таблицы:
customers (id, name)
contacts (id, name)
contacts_customers (contact_id, customer_id) <- the join-table
Теперь, когда я нажимаю на ссылку «добавить новый контакт», я попадаю на страницу «новый клиент», она даже правильно назначает customer_id, но когда я нажимаю «сохранить» после заполненияв контактной информации контакт создается, но объединяемая таблица (contacts_customers) не обновляется.В результате вновь созданный контакт не «подключен» к клиенту.
Я уже просматривал сеть в течение двух часов по этому вопросу и не могу с собой поделать.Я был бы более чем счастлив, если бы кто-то мог указать мне правильное направление!
Спасибо!
[Редактировать: Обновленные данные] Вот какие параметры передаются, как только я нажимаю «новый»contact "link on my" show.html.erb "view
Started GET "/customers/260/contacts/new" for 127.0.0.1 at 2012-01-18 08:21:28
Processing by ContactsController#new as HTML
Parameters: {"customer_id"=>"260"}
Customer Load (0.0ms) SELECT 'customers'.* FROM 'customers' WHERE 'customers'.'id' = 260 LIMIT 1
Rendered contacts/_form.html.erb (9.0ms)
Rendered contacts/new.html within layouts/application (13.0ms)
Completed 200 OK in 343 ms (Views: 26.0ms | ActiveRecord: 299.0ms)
Как видите, customer_id (в моем примере это 260) должен быть передан новому контроллеру контактов.Однако, когда я нажимаю «сохранить», который запускает POST-запрос для фактического создания записей базы данных, customer_id теряется и обновляется только таблица контактов:
Started POST "/contacts" for 127.0.0.1 at 2012-01-18 08:28:00 +0100
Processing by ContactsController#create as HTML
Parameters: {"utf8"=>"Ô£ô", "authenticity_token"=>"jWMlruMezFGOy1j7vTbE9OcL8VareGUXS1AprBpNhGA=", "contact"=>{"anrede"=>"", "name"=>"Test", "position"=>"", "telefon"=>"", "mobil"=>"", "fax"=>"", "email"=>"", "sonstiges"=>""}, "commit"=>"Create Contact"}
BEGIN SQL (0.0ms)
INSERT INTO `contacts` (`anrede`, `email`, `fax`, `mobil`, `name`, `position`, `sonstiges`, `telefon`) VALUES ('', '', '', '', 'Test', '', '', '') (113.0ms)
COMMIT
Redirected to http://localhost:3000/contacts/626
Completed 302 Found in 174ms
Я не уверен, что онлюбая помощь, но на всякий случай.Мои маршруты настроены так:
resources :contacts
resources :customers do
resources :contacts
end