Utilizzare il form_for di Rails ma impostare classi personalizzate, attributi sull'elemento <form>?


89

form_forsembra ignorare qualsiasi attributo "extra" come un data-fooattributo o classpassato come optionsnel secondo argomento.

= form_for @user, {:url => 'foo', :class => 'x', 'data-bar' => 'baz' } do |f|
  # ...

L'output è un <form>tag senza xclasse o data-barattributo.

Qual è la soluzione?

Oppure, come posso acquisire FormBuilderun'istanza senza utilizzarla form_for?

Risposte:


191

Usa l' :htmlhash:

= form_for @user, :html => {:class => 'x', 'data-bar' => 'baz'} do |f|

O

= form_for @user, html: {class: 'x', data: { bar: 'baz' } } do |f|

1
Ho trovato che questo non funziona: = form_for @user, :html => {'class' => 'x'} do |f|. classdovrebbe essere un simbolo invece di una stringa.
— Trantor Liu

11

Rails 4.0.3, Ruby 2.1.0p0 -> questo ha funzionato per me =>

<%= form_for(@contact, :html => {:class => 'form_height'}) do |f| %><% if     @contact.errors.any? %>

4

Ho avuto lo stesso problema ma ero perplesso che un altro modulo altrove nella mia app funzionasse bene.

Mi sono reso conto di aver accidentalmente aggiunto un form_for all'interno di un altro form_for che una volta rimosso risolveva il problema.

In secondo luogo, dovrei aggiungere che questa sintassi funziona per me in Rails 4.2:

<%= form_for @type, html: {class: "form-horizontal"} do |f| %>

Lo trovo preferibile alla zuppa di punteggiatura delle altre risposte qui (che erano forse basate su una vecchia versione di Rails).


1

Nella maggior parte degli helper, l'ultimo arg è un hash di opzioni html per l'elemento.

= form_for @user, :html => {:class => 'x', 'data-bar' => 'baz'} %>

Puoi anche controllare altre alternative nella documentazione ActionsView :: Helpers :: FormHelper


1

Ho provato quanto sopra senza fortuna ma ho trovato una soluzione. Sto usando i binari 4.1.6.

Questo non ha funzionato

= form_for @user, :html => {:class => 'x', 'data-bar' => 'baz'} %>

Questo ha fatto

= form_for @user, html: {:class => 'x', 'data-bar' => 'baz'} %>

nota la differenza con l'opzione html, spero che questo aiuti


3
Wow veramente? quelli dovrebbero essere esattamente equivalenti. Puoi riprodurre questo? Quale versione di Ruby stai usando?
— Alan H.

@Alan H. Utilizzo di Ruby 2.1.3p242 = form_for(:user, :url => login_path, html: {:class => 'login_form'}) do |f| %> Questo era l'unico modo in cui il mio codice avrebbe applicato la classe, altrimenti la stava semplicemente ignorando.
— doz87

Queste due linee sono esattamente identiche. Immagino che ti sei dimenticato di salvare in mezzo?
— nathanvda

Lo so, dovrebbero esserlo. Per me però non funzionava. Il risparmio non era il problema.
— doz87
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.