Мне нужно иметь несколько кнопок отправки.
У меня есть форма, которая создает экземпляр Contact_Call.
Одна кнопка создает его как обычно.
Другая кнопка создает его, но должна иметь другое: значение атрибута от значения по умолчанию, и ей также необходимо установить атрибут в другой, но связанной модели, используемой в контроллере.
Как я могу это сделать? Я не могу изменить маршрут, так есть ли способ отправить другую переменную, которая будет получена [: params]?
И если я это сделаю, что мне делать в контроллере, настроить оператор case?
ruby-on-rails
ruby
form-submit
Тимоти Т.
источник
источник
Ответы:
Вы можете создать несколько кнопок отправки и указать для каждой разные значения:
Это выведет:
Внутри вашего контроллера отправленное значение кнопки будет идентифицировано параметром
commit
. Отметьте значение для выполнения необходимой обработки:Однако помните, что это тесно связывает ваш взгляд с контроллером, что может быть не очень желательно.
источник
Существует также другой подход, использующий атрибут formaction на кнопке отправки:
Код остается чистым, поскольку стандартная кнопка создания не требует никаких изменений, вы просто вставляете путь маршрутизации для специальной кнопки:
источник
Вы также можете узнать, какая кнопка была нажата, изменив имя атрибута.
Это немного неудобно, потому что вам нужно проверять наличие ключей params, а не просто проверять
params[:commit]
значение: вы получитеparams[:a_button]
или вparams[:b_button]
зависимости от того, какой из них был нажат.источник
Решение, аналогичное предложенному @ vss123, без использования драгоценных камней:
Обратите внимание, что я избегаю использования значения и использую вместо него имя ввода, поскольку значение кнопки отправки часто интернационализируется / переводится. Кроме того, я бы не стал использовать это слишком часто, поскольку это быстро загромождает ваш файл маршрутов.
источник
Мы решили использовать расширенные ограничения в рельсах.
Идея состоит в том, чтобы иметь один и тот же путь (и, следовательно, тот же именованный маршрут и действие), но с ограничениями, направленными на разные действия.
CommitParamRouting
- это простой класс, у которого есть метод,matches?
который возвращает истину, если параметр фиксации соответствует заданному экземпляру attr. стоимость.Это доступно как гем commit_param_matching .
источник
Старый вопрос, но поскольку я имел дело с той же ситуацией, я решил опубликовать свое решение. Я использую константы контроллера, чтобы избежать несоответствия между логикой контроллера и кнопкой просмотра.
А потом в представлении:
Таким образом, текст находится только в одном месте - как константа в контроллере. Однако я еще не пытался понять, как это сделать.
источник
У меня есть переменное количество кнопок отправки в моей форме благодаря nested_form_fields, поэтому мне было недостаточно просто использовать имя. В итоге я включил в форму скрытое поле ввода и использовал Javascript для его заполнения при нажатии одной из кнопок отправки формы.
источник