#ruby-on-rails #checkbox #nested-attributes #has-many-through
#ruby-on-rails #флажок #вложенные атрибуты #имеет много сквозных
Вопрос:
У меня есть 4 модели
class Contract < ActiveRecord::Base
has_many :addendums
accepts_nested_attributes_for :addendums
end
class Addendum < ActiveRecord::Base
belongs_to :contract
has_many :addendum_services
has_many :services, through: :addendum_services
end
class AddendumService < ActiveRecord::Base
belongs_to :addendum
belongs_to :service
end
class Service < ActiveRecord::Base
has_many :addendum_services
end
Я использую вложенные атрибуты для создания дополнения через форму контракта, и это работает для всех атрибутов дополнения, но я также хочу, чтобы пользователь выбрал, используя check_box_tag
, список используемых сервисов. Поскольку у Addendum
нет атрибута для addendum_services
, что я должен добавить к сильным параметрам Contract
, чтобы принять список служб? Кроме того, как я могу сгенерировать список служб в форме? в настоящее время я использую это:
<%= form_for(@contract) do |f| %>
...
<%= f.fields_for :addendums do |addendums_form|%>
<%= addendums_form.label 'Services'%><br>
<% for serv in Service.all %>
<%= check_box_tag "service[]", serv, @addendum.services.include?(serv) %>
<%= serv %><br>
<% end %>
но это не работает…
Ответ №1:
Я использую аналогичный метод, но с документами и категориями.
Считайте документ сервисом
class Document < ActiveRecord::Base
has_many :categorisations
has_many :categories, :through => :categorisations
Категория дополнение
class Category < ActiveRecord::Base
has_many :categorisations
has_many :documents, :through => :categorisations
и дополнительный сервис для категоризации
class Categorisation < ActiveRecord::Base
belongs_to :document
belongs_to :category
Примечание: Вам не хватает сквозного метода для службы
has_many addendum, :through => :addendum_services
Кроме того, мой флажок выглядит следующим образом;
- Category.all.in_groups_of(3,false) do |category_list|
%tr
- for categories in category_list
%td
= check_box_tag "categorisation[category_ids][]", categories.id, @document.categories.include?(categories)
%label= categories.title
Обратите внимание на «категоризацию [category_ids] []» вместо «service []» -> возможно, вам нужен «addendum_service[:service][]»?
Надеюсь, это позволит вам адаптировать свой код или, возможно, назвать меня глупым и улучшить мою разработку.