По умолчанию у меня будет окно выбора и кнопка со скрытым текстовым полем, если переменная @show_textbox
не имеет значения true. Как то так:
<div class="field">
<div id="select_div">
<%= select_tag :name,options_for_select(@exercise_added) %>
<%= f.submit "New Exercise" %>
</div>
<div id="regular_field" <%= hidden_unless @show_textbox %> >
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
</div>
Где я написал вспомогательную функцию
def hidden_unless cond
raw "style=\"display: none;\"" unless cond
end
# this one is helpful, too
def hidden_if cond
raw "style=\"display: none;\"" if cond
end
Затем в моем контроллере проверьте, была ли нажата кнопка «Новое упражнение». Если это так, то по существу установите @show_textbox
в значение true, а затем повторно отредактируйте форму new
.
def create
# .....
# did we get here because the user pressed "New Exercise"?
if params[:commit].eql?("New Exercise")
@show_textbox = true
# probably some other code to replicate what happens in your #new action
render :action => new
end
# ....
end
Вы можете проверить в своем контроллере, есть ли в поле :name
какой-либо текст, и использовать его для переопределения поля выбора.
Это должно работать без JavaScript. Я бы добавил jQuery, чтобы заменить кнопку ссылкой или флажком, с обработчиком щелчка для этого, который подключен к функции, которая отображает текстовое поле, т.е. $('#regular_field').toggle();
.
Я не имел дела с сокрытием поля выбора. Я действительно думаю, что было бы лучше оставить это доступным. В любом случае, вы можете скрыть это, используя похожий метод.