2011-04-19 30 views
0

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

正如你可以看到它是真正的基本html编码。 ... 机细节 名称: <%= @ machine.name%>
IPAddress表示 <%= @ machine.ipaddress%>
处理器: <%= @ machine.processor %>
内存: <%= @ machine.memory%>
操作系统: <%= @ machine.os%>
说明: <%= @ machine.description%>
机状态: <%,如果@ machine.active ==真%> 在线 <%其他%> 离线 <%end%>
<%if @ machine.can_reserved == false%> 本机无法保留。查看描述 <%结束%>

<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选项中显示的日期。

有什么想法?我非常感谢帮助。

谢谢。

汤姆

+0

您还可以提供加载此表单的控制器方法的代码吗? – brettish 2011-04-19 18:08:39

+0

@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 {render:xml => @machine} end end – user715698 2011-04-19 18:13:58

+0

尝试添加'@reservation.startdate = DateTime.now'并查看它是否执行任何操作。 – brettish 2011-04-19 18:18:48

回答

0

有几个方法可以做到这一点,我要告诉你一个办法:

的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 

machine.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 

的意见/预订/ _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!

我希望这会有所帮助。

+0

我有路线,模型按照您的建议设置,除了预订控制器。它只有两种方法'创造'和'毁灭'。可能它没有完全建立RAILS方式。我会尝试你的建议,所有这一切,并让你知道。谢谢你的时间。对此,我真的非常感激。汤姆 – user715698 2011-04-19 19:08:29