我正在尝试创建一个表单,该表单会在用户点击日历中的日期时加载,然后表单会传递通过URL单击的日期,并且控制器会将该日期分配给@date
变量。然后,我创建一个date_select
元素并为其分配@date
变量。这工作正常,但因为我不希望用户能够在表单中编辑日期,我希望它被隐藏。
我将这些html选项传递给表单,但它似乎不会影响HTML:
<%= f.date_select :date, :default => @date, :type => "hidden" %>
我错过了什么吗?我也尝试在HTML哈希:html => { :type = "hidden" }
中传递它,但这也不起作用。即使我尝试不同的:class => "something"
之类的东西,它也不会改变HTML。 date_select
助手有什么特别之处吗?
答案 0 :(得分:5)
date_select
接受选项discard_day
,discard_month
和discard_year
来完成你想要达到的目标。
<%= f.date_select :date, { :discard_day => true, :discard_month => true, :discard_year => true } %>
在幕后,它会生成以下HTML代码:
<input id="record_date_3i" name="record[date(3i)]" type="hidden" value="5" />
<input id="record_date_2i" name="record[date(2i)]" type="hidden" value="1" />
<input id="record_date_1i" name="record[date(1i)]" type="hidden" value="2012" />
没有CSS技巧,控制器没有变化。
答案 1 :(得分:4)
根据名称,date_select
生成<select>
个元素。在(X)HTML的任何版本中,select
元素都不支持type
属性。如果您想要一个隐藏的表单字段,那么您应该使用生成<input type="hidden">
元素的hidden_field
帮助器。
(要回答关于使用例如:class => 'something'
的隐含问题,问题是options
和html_arguments
参数必须是两个单独的哈希值,但如果您执行以下操作:< / p>
<%= f.date_select :date, :default => @date, :class => 'something' %>
.. Ruby解释器假设你提供了一个哈希,即{ :default => @date, :class => 'something' }
(实际上,你可以责怪它吗?),因为class
不是options
的有效密钥{1}}哈希它被忽略了。相反,你必须让Ruby明白这些是两个独立的参数,而不是做这样的事情:
<%= f.date_select :date, :default => @date, { :class => 'something' } %>
<%# Hey Ruby, this is a different Hash! ----^ %>
看到区别?当然,你可以去疯狂,并且真的显而易见,例如:
<%= f.date_select(:date, { :default => @date }, { :class => 'something' }) %>
..但那是丑陋和令人发指的,所以不要打扰。)
答案 2 :(得分:2)
你可以把它放在一个隐藏的div中:
<div style="display: none;">
<%= f.date_select :date, :default => @date, :type => "hidden" %>
</div>
这将允许您拥有所有字段和隐藏,您也可以使用日期和时间选择:
<div style="display: none;">
<%= f.datetime_select :date, :default => @date, :type => "hidden" %>
</div>