我错过了accepts_nested_attributes_for
中的ScheduleTemplates
。
我的上一个问题是在凌晨4点问到的,所以我想我会再试一次。
我在这里有3个型号。 User
,ScheduleTemplate
和DayBlock
。这里的目标是一个调度应用程序,它允许每个用户拥有不同的调度模板,在这些模板中,他们有可用的工作开始和结束时间。他们可以根据需求的变化(de)激活模板。
我还有3种类型的时间表
BaseSchedule
(充当原始可用性)ScheduleTemplate
(他们的偏好)Schedule
(本周的比赛时间表)因此,我决定制作DayBlock多态:as => :schedulable
。
创建用户后,我有一个after_create
回调来创建基本和模板计划对象(每个用户都需要并使用它)。
## ScheduleTemplatesController.rb
after_create :generate_default_schedules
has_one :schedule_template
has_one :base_schedule
accepts_nested_attributes_for :base_schedule, :schedule_template, reject_if: :all_blank
## User.rb
def generate_default_schedules
@base ||= BaseSchedule.new(:user => self)
@template ||= ScheduleTemplate.new(:user => self, :mutable_type => 1)
build_schedules(@base, @template)
end
## ScheduleHelper.rb
def build_schedules(*schedules)
schedules.each do |schedule|
build_days_for(schedule).save!
end
end
def build_days_for(schedule)
7.times {|i| schedule.day_blocks.build({
:schedulable_id => schedule,
:from => "0600",
:to => "0200",
:day_index => i
})}
schedule
end
我知道这样可以正常工作,因为以下输出显示在我的new.html.erb
文件中,我希望在每个day_block中编辑表单:
<%= debug @schedule.day_blocks %>
---
- !ruby/object:DayBlock
attributes:
id: 8
schedulable_id: 1
schedulable_type: ScheduleTemplate
day_index: 0
from: '0600'
to: '0200'
- !ruby/object:DayBlock
attributes:
id: 9
schedulable_id: 1
schedulable_type: ScheduleTemplate
day_index: 1
from: '0600'
to: '0200'
.... more
在我的ScheduleTemplatesController #new
操作中:
def new
@user = current_user
@schedule = current_user.schedule_template
end
到目前为止非常基本的东西。
pisser带有以下形式:
<%= form_for @schedule, :url => user_schedule_templates_path do |schedule| %>
<%= schedule.fields_for :day_blocks do |day| %>
<%= day.label :from %>
<%= day.text_field :from %>
<% end %>
<% end %>
当我想要所有7个时,我得到一个标签,一个文本字段。我不明白为什么我可以调试所有7天_blocks,但是当涉及到fields_for时,它只显示一个。
我在这里完全失败了,希望有人可以对此有所了解!它让我发疯了!