Rails 3 - вложенные формы с множеством "через" связаны с флажками - PullRequest
2 голосов
/ 19 декабря 2010

Я использую ассоциацию «многие из», так что статья может быть «сохранена» во многих разделах, и это отношение называется местоположением.В таблице расположений также есть столбец «по умолчанию» (логический), что позволяет пользователю указать, какой раздел является разделом по умолчанию.

Вот модели:

class Article < ActiveRecord::Base
  has_many :locations
  has_many :sections, :through => :locations

  def default_location
    self.sections.where('locations.default = 1').first
  end
end

class Location < ActiveRecord::Base
  belongs_to :article
  belongs_to :section
end

class Section < ActiveRecord::Base
  has_many :locations
  has_many :articles, :through => :locations
end

Итакна мой взгляд:

<%= form_for(@article) do |f| %>
...
  <p class="field">
     <h3>Locations</h3>
     <ul>
      <% @sections.each do |section| %>
        <li><%= radio_button_tag ???, section.id, :checked => @article.default_location == section %> <%= check_box_tag 'article[section_ids][]', section.id, @article.section_ids.include?(section.id), :id => dom_id(section) %><%= label_tag dom_id(section), section.name %></li>
      <% end %>
     </ul>
   </p>
...
<% end %>

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

Любые идеи будут по достоинству оценены!Спасибо.

1 Ответ

1 голос
/ 19 декабря 2010

Не уверен, зачем вам нужны и радио-кнопка, и флажок. Попробуйте добавить hidden_field_tag ​​вместе с check_box_tag:

  <p class="field">
     <h3>Locations</h3>
     <%= hidden_field_tag "article[section_ids][]", "" %>
     <ul>
      <% @sections.each do |section| %>
        <li>
          <%= check_box_tag :section_ids, section.id, @article.section_ids.include?(section.id), :id => dom_id(section), :name => 'article[section_ids][]' %>
          <%= label_tag dom_id(section), section.name %>
        </li>
      <% end %>
     </ul>
   </p>
...