这是我的代码示例:
<%= form_for [@facility, @owner],:html => {:multipart => true} do |f| %>
<%= render 'shared/error_messages_doc' %>
<table>
<tr>
<td valign=top> First Name </td>
<td ><%= f.text_field :first_name %></td>
</tr>
<tr>
<td valign=top> Last Name </td>
<td ><%= f.text_field :last_name %></td>
</tr>
</table>
<br>
<table width = "750">
<tr>
<th>Day</th>
<th>Start time</th>
<th>End time</th>
</tr>
<%= f.fields_for :working_hours, @owner.working_hours do |wh| %>
<div>
<tr>
<td><%= wh.object.week_day %></td>
<td>
<center><%= wh.text_field :start_time, :value => wh.object.start_time.strftime('%H:%M'), :style => "width: 100px;" %></center>
</td>
<td>
<center><%= wh.text_field :end_time, :value => wh.object.end_time.strftime('%H:%M'), :style => "width: 100px;" %></center>
</td>
</tr>
</div>
<% end %>
</table>
<tr>
<td><%= f.submit :class => "btn btn-primary" %></td>
</tr>
</table>
<% end %>
正如您所看到的,我正在尝试创建一个拥有许多working_hours的所有者(7个working_hours,每个工作日一个)。问题是这与编辑有关,但是当我尝试创建新所有者时,work_hours的字段不会显示。我认为问题是@ owner.working_hours正在寻找所有者的working_hours,目前还不存在。由于我正在创建一个新的所有者,我需要为所有者创建一个包含7个working_hours的数组。我怎样才能做到这一点?提前谢谢!
答案 0 :(得分:0)
创建working_hours
使用build
。在您的控制器中,您可能需要以下内容:
class OwnersController < ApplicationController
def new
@owner = Owner.new
@owner.working_hours.build(Time::DAYS_INTO_WEEK.map{|name, value| { day_of_week: value }})
end
end
使用Time::DAYS_INTO_WEEK
可能有点矫枉过正,但我不知道working_hours
的属性是什么;这是一个如何为创建的对象设置默认值的示例。
为了解释,build
可以接受定义新创建对象的属性值的哈希数组,因此上面扩展为:
@owner.working_hours.build([{:day_of_week=>0}, {:day_of_week=>1}, {:day_of_week=>2}, {:day_of_week=>3}, {:day_of_week=>4}, {:day_of_week=>5}, {:day_of_week=>6}])
正如您所看到的,它创建了七个具有day_of_week
属性集的对象。