首页 > 解决方案 > 如何使用 Rails 将计数器写入数据库

问题描述

我正试图在脚手架上写下企业的营业时间。

我正在这样做,使用嵌套数据库,特别是我正在关注本教程

http://railscasts.com/episodes/196-nested-model-form-part-1

适应我的情况。该教程显示了调查的创建,而我正在记录营业时间。

一切正常,但我在计算天数时遇到问题..

我在我的控制器中使用它:

def new
    @biz = Biz.new
    7.times { @biz.hours.build }

  end

通过这种方式,我在我的模块中写了 7 倍的工作时间并且它工作正常。我的问题是我想在我的数据库中发布的“day_id”,理想情况下它应该是 1=Monday、2=Tuesday 等。但是我的输入视图是这样设置的:

<%= f.fields_for :hours do |builder| %> 
    <tbody>
      <tr>
        <td> <%= builder.label :day, "Monday" %> <%= builder.text_field 
:day, :value => "1", :style =>"display: none" %> </td>
        <td> <%= builder.time_select :open_time %> </td>
        <td> <%= builder.time_select :close_time %> </td>
        <td> <%= builder.check_box :chiusurastra %> </td>
        <td> <%= builder.text_field :motivochistra %> </td>
    </tbody>
  <% end %>

当然这不起作用,因为“一天”总是在控制器运行的 7 次中各获得 1 次(而且我总是在视图中显示星期一)

有没有办法根据控制器执行相应地更改我在视图中使用的 :value => "1" 和我在 7 次中显示的 "Monday"?

我正在显示的输入视图

非常感谢!

标签: ruby-on-railsdatabasecountnested

解决方案


而不是 7.times 在你的控制器中你可以做

[0,1,2,3,4,5,6].each do |day| @biz.hours.build :day => day end

为了在标签中显示日期名称,您也可以使用数组。

day_names = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']

这里棘手的部分是让数组索引与您的日期数匹配。如果在某些时候您想使用本地化文件,例如https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en.yml一周从星期日开始(day_names[0])并以星期六(day_names[6])结束。所以我建议将您的日期索引更改为 [0,1,2,3,4,5,6] 并从 0 = 星期日开始

在您看来,您可以将日期列更改为以下内容:

<td><%= builder.label :day, day_names[day] %> <%= builder.hidden_field :day %></td>

隐藏字段的值应该自动设置


推荐阅读