Не могу сделать форму date_select скрытой в рельсах - PullRequest
4 голосов
/ 02 ноября 2011

Я пытаюсь создать форму, которая загружается при нажатии пользователем даты в календаре, затем в форме передается дата, по которой щелкают ссылки, и контроллер назначает эту дату переменной @date.Затем я создаю элемент date_select и назначаю ему переменную @date.Это работает нормально, но так как я не хочу, чтобы пользователь мог редактировать дату в форме, я хочу, чтобы она была скрыта.

Я передаю эти опции HTML в форму, но, похоже, никогдавлияют на HTML:

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

Я что-то упустил?Я также попытался передать его в HTML-хэш :html => { :type = "hidden" }, но это тоже не работает.Даже когда я пробую что-то другое, например :class => "something", это не меняет HTML.Есть ли что-то особенное в помощнике date_select?

Ответы [ 3 ]

5 голосов
/ 05 января 2012

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, никаких изменений в ваших контроллерах.

4 голосов
/ 02 ноября 2011

По имени date_select генерирует <select> элементов.Ни в одной версии (X) HTML элемент select не поддерживает атрибут type.Если вы хотите скрытое поле формы, вы должны использовать помощник hidden_field, который генерирует <input type="hidden"> элементов.


(Чтобы ответить на ваш подразумеваемый вопрос об использовании, например, :class => 'something' проблема в том, что параметры options и html_arguments должны быть двумя отдельными хэшами, но если вы делаете что-то вроде этого:

<%= f.date_select :date, :default => @date, :class => 'something' %>

.. интерпретатор Ruby предполагает, что вы указали одинхэш, то есть { :default => @date, :class => 'something' } (и действительно, вы можете винить в этом?), и, поскольку class не является действительным ключом для хеша options, он игнорируется. Вместо этого вы должны сделать очевидным для 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 голосов
/ 04 ноября 2014

Вы можете поместить его в скрытый 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...