вложенная коллекция - PullRequest
       1

вложенная коллекция

0 голосов
/ 10 февраля 2012

Я строю периодическую биллинговую систему и у меня проблемы с вложенной формой. Следующий код работает, но делает POST с:

"customer"=>{"service"=>{"service_id"=>"1"}}

Это должен быть Customer.services вместо Customer.service. Однако, если я изменю форму на ссылку fields_for: services, она вообще не будет отображаться.

_form.html.haml

= form_for @customer do |f|
= f.fields_for :service do |service_fields|
  = service_fields.collection_select(:service_id, Service.all, :id, :name, { :prompt => 'Select Package' })
= f.submit "Add Service", class: "btn"

Модели / customer.rb

class Customer < ActiveRecord::Base
  has_many :subscriptions, :dependent => :destroy
  has_many :services, :through => :subscriptions

  accepts_nested_attributes_for :services
end

Модель / service.rb

class Service < ActiveRecord::Base
  has_many :customers, :through => :subscriptions
  has_many :subscriptions
end

модель / subscription.rb

class Subscription < ActiveRecord::Base
  belongs_to :customer
  belongs_to :service
end

Ответы [ 2 ]

0 голосов
/ 10 февраля 2012

Мне удалось наконец понять это (с помощью коллеги). Я внес все вышеперечисленные изменения благодаря ответу @ Azolo, приведенному выше, также изменив представление формы на:

_form.html.haml

= f.fields_for :subscriptions, @customer.subscriptions.build do |builder|
0 голосов
/ 10 февраля 2012

Итак, в этой ситуации вы хотите построить subscription на customer.Поскольку вы в значительной степени на правильном пути, это должно быть так же просто, как изменить эту

_form.html.haml

= form_for @customer do |f|
= f.fields_for :subscriptions do |subscription_fields|
  = subscription_fields.collection_select(:service_id, Service.all, :id, :name, { :prompt => 'Select Package' })
= f.submit "Add Service", class: "btn"

моделей /customer.rb

class Customer < ActiveRecord::Base
  has_many :subscriptions, :dependent => :destroy
  has_many :services, :through => :subscriptions

  accepts_nested_attributes_for :subscriptions
end

Прямо сейчас причина, по которой вы получаете что-либо, заключается в том, что вы заставляете форму отправлять новый атрибут с именем service, а затем возвращаетданные из fields_foraccepts_nested_attributes_for {model} вы должны искать params с чем-то вроде {model}_attributes

Кроме того, причина, по которой вы ничего не получаете при использовании :services в fields_for, заключается в том, что Service не отвечает на service_id.

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