Voglio eseguire un rendering condizionale a livello di layout in base al modello effettivo definito content_for(:an__area)
, qualsiasi idea su come ottenere questo risultato?Rails controlla se yield: area è definita in content_for
risposta
@content_for_whatever
è deprecato. Usa content_for?
invece, in questo modo:
<% if content_for?(:whatever) %>
<div><%= yield(:whatever) %></div>
<% end %>
Helper 'content_for?' Esiste solo in Rails 3. In Rails 2 puoi usare la variabile di istanza '@content_for _...' . – lest
Eccellente! Ho scritto questo per troppo tempo. Non più. – morganjlopes
funziona anche su binari 4. great thx – daniel
Ok, sto andando spudoratamente a rispondere autonomamente perché nessuno ha risposto e ho già trovato la risposta :) Definisci questo come un metodo di supporto sia in application_helper.rb o ovunque tu abbia trovato conveniente.
def content_defined?(symbol)
content_var_name="@content_for_" +
if symbol.kind_of? Symbol
symbol.to_s
elsif symbol.kind_of? String
symbol
else
raise "Parameter symbol must be string or symbol"
end
!instance_variable_get(content_var_name).nil?
end
Heh, mi piace la tua auto-risposta, ma ... Il punto minore, 'instance_variable_defined? (Content_var_name)' è un po 'più ordinario di invece di testare se è nulla. Secondo punto più grande, la variabile di istanza content_for è deprecata, quindi la tua soluzione non è a prova di futuro –
possibile creare un aiutante:
def content_defined?(var)
content_var_name="@content_for_#{var}"
!instance_variable_get(content_var_name).nil?
end
E utilizzare questo nel layout:
<% if content_defined?(:an__area) %>
<h1>An area is defined: <%= yield :an__area %></h1>
<% end %>
Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post. – eirikir
Sono d'accordo @eirikir, non sono sicuro di cosa stesse pensando il mio sé di 6 anni più giovane. Sto estendendo e lasciando la mia risposta per quelli ancora su Rails 2 .. senza il preambolo non necessario;) – Nick
non proprio necessario creare un metodo di supporto:
<% if @content_for_sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>
poi ovviamente a tuo avviso:
<% content_for :sidebar do %>
...
<% end %>
Io uso questo tutto il tempo di andare in modo condizionale tra un'una colonna e due colonne di layout
Non sono sicuro delle implicazioni sulle prestazioni di chiamare due volte il rendimento, ma questo farà a prescindere dal interna implementazione di rendimento (@content_for_xyz è deprecato) e senza metodi di codice o di supporto in più:
<% if yield :sidebar %>
<div id="sidebar">
<%= yield :sidebar %>
</div>
<% end %>
<%if content_for?(:content)%>
<%= yield(:content) %>
<%end%>
- 1. Problema con Rails Content_for/yield - contenuto duplicato
- 2. Rails content_for sovrascrive anziché appende
- 3. content_for vs resa in parziali
- 4. Ruby on Rails: fornire vs content_for
- 5. Ruby controlla se il blocco è nullo
- 6. Rails 3 - yield return o callback non chiamerà in vista <% = yield (: sidebar) || render ('shared/sidebar')%>
- 7. In che modo Ruby on Rails "content_for: title" ottiene qualcosa che viene assegnato in seguito?
- 8. Controlla se PyObject è None
- 9. HTML5 controlla se l'audio è in riproduzione?
- 10. Controlla variabile se è in un elenco
- 11. Controlla se il cronometro è in funzione
- 12. Controlla se bulk è vuoto in mongoDB
- 13. Controlla se l'utente è online (in diretta)
- 14. Crea area amministrazione nell'app Rails
- 15. Rails controlla se console IRB o pagina web
- 16. Verifica se una costante è già definita
- 17. rails content_for non viene eseguito durante il rendering?
- 18. Controlla se l'elemento è nella lista (contiene)
- 19. PHP controlla se il file è un'immagine
- 20. Controlla se un pacchetto è installato
- 21. Controlla se la colonna dataframe è Categorica
- 22. Controlla se il dominio è registrato
- 23. OSX: controlla se lo schermo è bloccato
- 24. controlla se la stringa è l'immagine
- 25. jQuery: Controlla se il pulsante è selezionato
- 26. Controlla se la finestra è un MessageBox
- 27. Java ArrayList - Controlla se l'elenco è vuoto
- 28. javascript controlla se img src è valido?
- 29. Pannello jQuery Mobile - controlla se è aperto
- 30. controlla se una stringa è un URL
Vedi la mia [risposta] (http://stackoverflow.com/questions/3347322/yield-if-content-render-something-otherwise-rails-3/7409626 # 7409626) per creare un metodo di supporto per incapsulare questo comportamento in Rails 3. – tristanm