就地编辑Time对象

时间:2012-12-22 12:37:14

标签: ruby-on-rails time edit-in-place best-in-place

我有一个应用程序,用于计划许多员工的工作班次。我有一个Shift模型,我将shiftstartshiftend存储为Time个对象。

我在表格中显示几天的页面上显示用户Shifts。我们的想法是,用户可以使用Best In Place gem直接在此表中修改shiftstartshiftend

但我似乎无法弄清楚在处理Time对象时如何使其工作 - 任何人都有这方面的经验或建议。

我有以下代码:

查看:

<% @myShifts.where(:shiftdate => date).order(:shiftstart).each do |shift| %>
  <div class="shift-item span">
    <div class="hider">
      <p>
        <i class="icon gear"></i>
          <%= best_in_place shift.shiftstart.strftime("%H.%M"), :type => :input %> - <%= best_in_place shift.shiftend.strftime("%H.%M"), :type => :input %>
      </p>
    </div>
  </div>
<% end %>

SCHEMA:

create_table "shifts", :force => true do |t|
  t.time     "shiftstart"
  t.time     "shiftend"
  t.integer  "type_id"
  t.integer  "user_id"
  t.string   "note"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
  t.date     "shiftdate"
end

我得到一个“未定义的方法`{:type =&gt;:input}'for”08.00“:String ”错误,我已经尝试将Best In Place Type切换为其他类型输入 - 没有帮助..

1 个答案:

答案 0 :(得分:4)

best_in_place方法有两个必需参数;一个对象(在你的情况下为shift)和一个字段(shiftstartshiftend),然后是选项的可选哈希(:type => :input)。所以你的代码必须是这样的:

<%= best_in_place shift, :shiftstart, :type => :input, :display_with => Proc.new { |f| f.strftime("%H.%M") } %>