无法将形式date_select隐藏在rails中

时间:2011-11-02 04:26:33

标签: ruby-on-rails forms

我正在尝试创建一个表单,该表单会在用户点击日历中的日期时加载,然后表单会传递通过URL单击的日期,并且控制器会将该日期分配给@date变量。然后,我创建一个date_select元素并为其分配@date变量。这工作正常,但因为我不希望用户能够在表单中编辑日期,我希望它被隐藏。

我将这些html选项传递给表单,但它似乎不会影响HTML:

<%= f.date_select :date, :default => @date, :type => "hidden" %>

我错过了什么吗?我也尝试在HTML哈希:html => { :type = "hidden" }中传递它,但这也不起作用。即使我尝试不同的:class => "something"之类的东西,它也不会改变HTML。 date_select助手有什么特别之处吗?

3 个答案:

答案 0 :(得分:5)

date_select接受选项discard_daydiscard_monthdiscard_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'的隐含问题,问题是optionshtml_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>