2012-02-02 5 views
10

La mia domanda è come impostare un campo in rotaie di sola lettura. Quanto segue è una casella di selezione tra virgolette. Gli utenti non sono autorizzati a modificare la selezione.Come impostare un campo di sola lettura nelle viste di rails 3.1.0?

<% @quote.test_items.each do |t| %> 
    <%= f.association :test_items, :label => false, :selected => t.id %> 
    <% end %> 

L'app utilizza simple_form. Grazie mille.

+0

in rotaie 4+ c'è in sola lettura: vero oggi. disabilitato: true funziona anche –

risposta

2

Non mi è chiaro se il metodo di associazione accetta o meno le opzioni HTML, ma se lo fa, è possibile passare disabled: 'disable' per renderlo di sola lettura con un valore fisso.

penso che si potrebbe essere in grado di scegliere il valore fisso passando associazione di blocco, come mostrato nella documentazione di associazione:

f.association :company do |c| 
    c.input :name, selected: 'selection' 
    c.input :type 
end 

quanto a se o non l'intero elenco può essere di sola lettura e ancora discesa, le uniche soluzioni che vedo da google coinvolgono JS, ad esempio:

http://techeyes.blogspot.com/2007/11/making-html-select-readonly.html

+0

L'esempio nel collegamento fornisce una soluzione. Ma non riesco a trovare il codice js allegato e quindi non riesco a capire come ha funzionato. Grazie. – user938363

+0

C'è più soluzione rail-ish? – user938363

7

credo che si era appena passa in :disabled => true. È stata la mia esperienza che le opzioni "funzionano" con simple_form. Quindi nel tuo caso:

<% @quote.test_items.each do |t| %> 
    <%= f.association :test_items, :label => false, :disabled => true, :selected => t.id %> 
<% end %> 

Dal simple_form github repo:

E 'anche possibile dare l'opzione: disabile a SimpleForm, e sarà contrassegnare automaticamente l'involucro come disabile con una classe CSS, in modo da puoi anche etichettare etichette, suggerimenti e altri componenti all'interno del wrapper.

+1

Il: disabled => true disattiva la selezione e rende la selezione non modificabile. Tuttavia, non consente al server di recuperare il valore della selezione. L'app deve passare il valore di selezione al server. Grazie per l'idea. – user938363

+0

Cosa stai cercando di realizzare? Chiaramente un elemento del modulo non è quello che stai cercando poiché lo vuoi disabilitare comunque. Stai cercando di impostare i valori predefiniti per il modulo? –

+0

Ciò di cui abbiamo bisogno prima è un campo readonly. Il valore del campo viene trasferito dal database e non è necessario che l'utente lo selezioni. L'app consente inoltre all'utente di eliminare completamente un campo. Ecco perché abbiamo bisogno che il valore sia inviato al server. : disabled => true realizza l'obiettivo di readonly e fallisce il 2 ° che è quello di inviare il valore al server. se il campo disabilitato può essere impostato su falso prima di postare sul server, potrebbe funzionare. – user938363

37

Ho riscontrato un problema simile, per fortuna, c'è una semplice risoluzione.

Il problema di base è che se si utilizza :disabled => true con simple_form non si vedrà quel valore nel controller. Quando si passa un oggetto dal modulo HTML per poi associarlo al modello, sono necessari tutti questi attributi. Il :disabled => true tuttavia non passa alcun attributo di questo tipo.

La soluzione è utilizzare :readonly => true - proteggerà il campo dall'immissione dell'utente e continuerà a trasferire il valore del parametro al controller in modo da poter collegare tutto al modello.

Buona fortuna.

Vedi https://github.com/plataformatec/simple_form/pull/367

+2

Questa risposta è la più rilevante per la domanda, IMO. Dovrebbe essere selezionato come corretto. – navjotk

+0

Ho anche scoperto che le associazioni potrebbero non rispettare la flag di sola lettura e terminare utilizzando disabili per le mie esigenze – ScottJShea

1

Sì, quello che @ gk0r ha detto, in quanto è documented here:

NOTA: Le opzioni HTMLdisabled, readonly e multiple possono essere trattati come booleani. Quindi specificare :disabled => true darà disabled="disabled".

* disabilitato avrà un comportamento leggermente diverso da quello di sola lettura.

3

Le risposte in alto sono tutte sbagliate.

l'attributo disabilitato ha un comportamento diverso da quello di sola lettura.

lettura e confrontarli:

http://www.w3schools.com/tags/att_input_disabled.asp

Suggerimento: non saranno presentate elementi portatori di handicap in un modulo.

http://www.w3schools.com/tags/att_input_readonly.asp

La risposta giusta è quella di utilizzare

:readonly => true 

qualcosa di simile:

<%= f.association :test_items, :label => false, :readonly => true, :selected => t.id %>