Я пытаюсь сделать fields_for подмножества объектов и борюсь с некоторыми.Вот некоторые детали:
class Club < ActiveRecord::Base
has_many :shifts
...
<%= form_for club, :url => shift_builders_url do |f| %>
...
<% these_shifts = Shift.where(:club_id => club.id, :date => date) %>
<%= f.fields_for :shifts, these_shifts do |s| %>
<td><%= render "shift_fields", :f => s %></td>
<% end %>
...
Таким образом, этот код работает в основном так, как ожидалось, хотя очевидно, что делать эти вызовы в представлении ужасно.Чтобы очистить код, я добавил следующий код контроллера:
...
@shifts_by_club_and_date = sort_shifts_by_club_and_date(@shifts)
...
private
def sort_shifts_by_club_and_date(shifts)
return_hash = Hash.new
shifts.each do |s|
return_hash["#{s.club_id}-#{s.date}"] ? return_hash["#{s.club_id}-#{s.date}"] << s : return_hash["#{s.club_id}-#{s.date}"] = [s]
end
return return_hash
end
Затем, когда я это сделаю:
<%= form_for club, :url => shift_builders_url do |f| %>
...
<% these_shifts = @shifts_by_club_and_date["#{club.id}-#{date}"] %>
<%= f.fields_for :shifts, these_shifts do |s| %>
<td><%= render "shift_fields", :f => s %></td>
<% end %>
...
Вместо того, чтобы принять этот массив, он делает что-то вроде:
Shift Load (7.3ms) SELECT `shifts`.* FROM `shifts` WHERE (`shifts`.club_id = 2)
А затем рисует поля для каждого отдельного объекта сдвига для этого клуба ... Передача в объект Arel, кажется, работает нормально, но массив, кажется, не работает.Каков наилучший способ иметь поля для рисования только подмножества объектов?
Я смотрел на этот похожий вопрос , но я не думаю, что смогу сделать ассоциацию как has_many: shifts_on_day (date) ....
Редактировать, чтобы добавить: Я использую Rails 3.0.7 на REE с MySQL