我的一个变量出了问题。
我有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 %>
才能为该死的变量添加日期。你甚至不能没有=
(等号)。很沮丧。
感谢您的评论和回答,这一切都很有帮助。
我觉得这个问题可能有更好的解决方案,所以这个问题将来可能对其他人有用。
答案 0 :(得分:1)
您是否尝试过添加隐藏的<%= f.date_select :ends_on %>
?我假设您只关心防止用户必须选择相同的日期,因此您可以在表单中使用此标记,但在html_options哈希中使用css隐藏它。