【问题标题】:rails refreshing date in datetime_select option在 datetime_select 选项中刷新日期
【发布时间】:2011-04-20 02:56:18
【问题描述】:

首先,我是 HTML 和 RAILS 编码的新手。但作为学习经验的一部分,我为我正在工作的实验室设计了一个机器预订系统。我有一个表单 (show.html.erb) 来查看机器详细信息,如名称、ipaddress 等。有一个带有 datetime_select 的预订表格,小时数选项如下所示,

如您所见,这是非常基本的 html 编码。 ... 机器细节 名称:
IP 地址:
处理器:
内存:
操作系统:
描述:
机器状态: 在线 离线
这台机器无法保留。见说明

   <fieldset>
    <legend>Create a New Reservation</legend>
      <p style="color: red"><%= flash[:error] %></p>
      <%= form_for [@machine, @reservation] do |f| %>
          <div class="field"> 
              <%= f.label :startdate, 'Start Time' %>:
              <%= f.datetime_select :startdate %> (<b>PST</b> timezone)
          </div>
          <div class="field">
              <%= f.label :purpose, 'Reason' %>:
              <%= f.text_field :purpose, :size => 40 %>
          </div>
          <div class="field">
              <%= f.label :hour, 'Hour(s)' %>:
              <%= f.text_field :hour, :size => 2 %>
          </div>
          <div class="field">
              <%= f.label :days, 'No of Days' %>:
              <%= f.text_field :days, :size => 2 %>
          </div>
          <div class="actions">
              <%= f.submit 'Reserve this machine' %>
          </div>
      <% end %>
      <br />
      </fieldset>

... 现在,当您单击机器的显示操作时,它会正确执行所有操作。显示所有机器详细信息,并在预订表格中显示当前时间。但是当我在一分钟后刷新页面时,它会刷新机器详细信息,但它不会(刷新)更改已使用 datetime_select 选项显示的时间。为什么?它怎么总是显示当前时间?我理解视图只不过是一个静态页面。 我在页面中添加了标签,该标签再次自动刷新整个页面,但似乎不会影响 datetime_select 选项中显示的日期。

有什么想法吗?非常感谢您的帮助。

谢谢。

汤姆

【问题讨论】:

  • 能否也提供加载此表单的控制器方法的代码?
  • @brettish,这是来自 machines_controller.rb 文件的代码,def show @machine = Machine.find(params[:id]) @reservation = Reservation.new @reservation.user_id = session[: user_id] @noOfDays = 7 respond_to do |format| format.html # show.html.erb format.xml { 渲染 :xml => @machine } end end
  • 尝试添加@reservation.startdate = DateTime.now 看看是否有任何作用。
  • 另外要提的一点是,当用户点击“预订这台机器”操作时,它会创建预订,然后返回到同一页面,但这一次,“datetime_select”显示当前时间。
  • @brettish, @reservation.startdate = DateTime.now 没有做到这一点。

标签: ruby-on-rails datetime-select


【解决方案1】:

有几种方法可以做到这一点,我将向您展示一种方法:

routes.rb:

resources :machines do
  resources :reservations
end

这将产生 /machines/1/reservations 和 /machines/1/reservations/new 等路径。运行 rake routes 以查看生成的路由及其辅助方法名称。

reservation.rb

class Reservation < ActiveRecord::Base
  belongs_to :machine
end

ma​​chine.rb

class Machine < ActiveRecord::Base
  has_many :reservations, :dependent => :destroy
end

reservations_controller.rb

更新新方法如下:

def new
  @machine = Machine.find params[:machine_id]
  @reservation = Reservation.new(:machine => @machine)
end

views/reservations/_form.html.erb

<%= form_for [:machine, @reservation] do |f| %>
    ... put your machine data stuff here ...
    ... put your form fields here ...
<% end %>

这应该可以解决问题。请记住,按照我概述的路线设置,您将需要更新在各个地方的代码中找到的路线帮助程序。使用rake routes 查看这些路由名称等。

另外,创建链接以创建新的预订(可能在显示机器页面上?)使用如下内容:

link_to "New Reservation", new_machine_reservation_path(@machine)

当然,如果需要,可以用存储您要预订的机器的任何变量替换 @machine。

另外,别忘了更新 reservations_controller#create!

我希望这会有所帮助。

【讨论】:

  • 我已经按照您的建议设置了路线和模型,但保留控制器除外。它只有两个方法'create'和'destroy'。可能是它没有完全设置 RAILS 方式。我会尝试你的建议,所有这些,让你知道。谢谢你的时间。对此,我真的非常感激。 - 汤姆
猜你喜欢
  • 1970-01-01
  • 2013-02-24
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
相关资源
最近更新 更多