我不知道为什么我的has_many通过复选框不保存。这是一个相当复杂的表格(一个语言暑期课程的在线申请),所以除了常规的申请人信息外,我还使用fields_for收集LanguageBackgroundAndInterest模型的属性。这些属性的一部分是申请人用来学习语言的书籍。代码看起来像这样:
<%= f.fields_for :language_background_and_interest do |builder| %>
<div class="field">
<%= hidden_field_tag "language_background_and_interest[book_ids][]" %>
<% Book.all.each do |book| %>
<br><%= check_box_tag "language_background_and_interest[book_ids][]", book.id %>
<%= book.name.humanize %>
<% end %>
</div>
<% end %>
使用has_many_through将language_background_and_interest和books连接在一起,如下所示:
class LanguageBackgroundAndInterest < ActiveRecord::Base
attr_accessible :book_ids
has_many :language_background_books
has_many :books, through: :language_background_books
end
class Book < ActiveRecord::Base
attr_accessible :name, :publisher
has_many :language_background_books
has_many :language_background_and_interests, through: :language_background_books
end
# Join Table
class LanguageBackgroundBook < ActiveRecord::Base
attr_accessible :language_background_and_interest_id, :book_id
belongs_to :language_background_and_interest
belongs_to :book
end
我不知道为什么从复选框的书没有被分配到适当的背景模型。什么好主意吗?
PS:当然,这个设计是相当模糊的(为什么不让书属于一个申请人?),但是我现在想要做一个原型,我也被一个可疑的要求所限制。所以我需要这个工作。
最后我回顾了我的模型设计并简化了它。我还切换到Simple Form来简化复杂表单的处理。