ruby on rails-fieldsfor无法在数组中传递



我正在尝试为一个子集的对象执行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对象似乎很有效,但数组似乎不行。让fields_for只绘制对象子集的最佳方法是什么?

我也研究过这个类似的问题,但我不认为我能像has_many:shifts_on_day(date)那样进行关联。。。。

编辑以添加:我使用MySQL 在REE上运行Rails 3.0.7

<%= form_for club, :url => shift_builders_url do |f| %>
...      
<% these_shifts = club.shifts_for_date(some_date) %>
<%= f.fields_for :shifts, these_shifts do |s| %>
  <td><%= render "shift_fields", :f => s %></td>
<% end %>

型号

class Club < AR::Base
  has_many :shifts
  ...
  def shifts_for_date(date)
    shifts.where(:date => date)
  end
  ...
end

尝试替换:

<%= f.fields_for :shifts, these_shifts do |s| %>
  <td><%= render "shift_fields", :f => s %></td>
<% end %>

带有:

<% for shift in these_shifts do %>
 <td><%= f.field_for :shift %></td>
<% end %>

我不确定,但these_shifts似乎不是你所期望的,那么当fields_for解析参数时,它会检查那里是否有东西,而没有找到你想要的东西,它会在俱乐部上做call(:shields),就像你在做f.fields_for :shields, nil do |s|一样。(参见https://github.com/rails/rails/blob/30c67000cab2284689bd93f25937c088d1ec6e74/actionview/lib/action_view/helpers/form_helper.rb#L1943)

相关内容

  • 没有找到相关文章

最新更新