我需要更改DateTime变量的日期部分

时间:2014-12-30 15:59:54

标签: ruby-on-rails date datetime

我的一个变量出了问题。 我有2个变量,:starts_on:ends_on。两者都是DateTime类型。 :starts_on会在表单中分配一个日期和时间,但:ends_on只能从表单中分配时间。不幸的是,日期部分变为" 2000-01-01",这是不对的。我想从:starts_on变量中分配日期,然后用户可以在表单中更改时间部分。到目前为止它还没有奏效。我的代码:

在app / views / courses / _form.html.erb

<%= form_for @course do |f| %>
  <%= f.label :starts_on, "Date:" %>
  <%= f.date_select :starts_on %>

  <%= f.label :starts_on, "Time:" %>
  <%= f.time_select :starts_on, :ignore_date => true %>

  <%= f.time_select :ends_on, :ignore_date => true %>

  <%= f.submit "Submit" %>
<% end %>
app / controllers / courses_controller.rb中的

(我只显示edit动作,但new是同一个想法)

def edit
  @course = Course.find(params[:id])
  @course.ends_on = @course.starts_on
end

所以,我尝试将代码放在那里使ends_on等于starts_on,然后在表单中用户将更改它的时间部分。然而,这不起作用,日期最终成为&#34; 2000-01-01&#34;对于他们所有人(时间部分是正确的)。如果我在表单中查找ends_on的值 - 它是正确的,但不能正确保存。请帮帮忙?

编辑/解决方案:

我明白了。 我尝试改变控制器的update动作 - 没有用。我尝试制作隐藏的date_select,最后有效的是:

<div style="display: none;">
  <%= f.date_select :ends_on %>
</div>

这是非常令人沮丧的,因为这是唯一可行的。似乎必须<%= f.date_select :ends_on %>才能为该死的变量添加日期。你甚至不能没有=(等号)。很沮丧。 感谢您的评论和回答,这一切都很有帮助。

我觉得这个问题可能有更好的解决方案,所以这个问题将来可能对其他人有用。

1 个答案:

答案 0 :(得分:1)

您是否尝试过添加隐藏的<%= f.date_select :ends_on %>?我假设您只关心防止用户必须选择相同的日期,因此您可以在表单中使用此标记,但在html_options哈希中使用css隐藏它。