0

这是我的代码示例:

    <%= 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 %>

如您所见,我正在尝试创建一个拥有许多工作小时(7 个工作小时,每个工作日一个)的所有者。问题是这与编辑一起使用,但是当我尝试创建新所有者时,working_hours 的字段不显示。我认为问题在于@owner.working_hours 正在从所有者那里寻找working_hours,目前不存在。由于我正在创建一个新所有者,因此我需要为该所有者创建一个包含 7 个工作小时的数组。我怎样才能做到这一点?

4

1 回答 1

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属性集的对象。

于 2013-05-17T15:19:55.503 回答