Ertrag und Standardfall || Ausgabe des Standardfalls nicht

8

Ich habe einen einfachen Yield-Anwendungsfall und aus einem unbekannten Grund wird der Standardfall nie angezeigt:

In meinem super_admin Layout habe ich:

%Vor%

Mein Controller

%Vor%

Meine Showansicht

Mit oder ohne

%Vor%

Mit : sadmin_golfs wird angezeigt.

ohne : Eine leere Zeichenfolge wird anstelle von super_admin_main

angezeigt

Kann jemand das gleiche Verhalten reproduzieren?

    
coulix 25.05.2010, 18:06
quelle

7 Antworten

18

Verwenden Sie Klammern:

%Vor%

Oder

%Vor%

Ohne sie wird yield (:body_id || 'super_admin_main')

angenommen

EDIT: Rails 3 verwendet ActiveSupport::SafeBuffer anstelle von String / nil (Rails 2), so dass die Ausgabe nicht Null ist, auch wenn kein content_for angegeben ist. Also versuche es:

%Vor%     
Voyta 25.05.2010, 18:17
quelle
24

Versuchen Sie <%= yield(:title).presence || 'My Default Title' %>

Object#presence entspricht object.present? ? object : nil (AS 3 rc docs) und ermöglicht im Wesentlichen die traditionelle Syntax mit den Titeln.

    
DirectXMan12 01.08.2010 19:00
quelle
3

Warum kein Test, wenn content_for in der View-Compilierung definiert ist oder nicht.

Im content_for-Code sehen wir:

%Vor%

In Ihrem Fall ist also @content_for_body_id definiert, wenn sich ein content_for in Ihrer Ansicht befindet.

Sie können Folgendes machen:

%Vor%

Wenn Sie möchten, können Sie nach

einen Helfer erzeugen %Vor%

und rufe es in deiner Sicht durch

auf %Vor%

Es funktioniert nur mit Rails 2.3.x

In Rails 3:

gibt es diese Methode content_for?

    
shingara 26.05.2010 09:10
quelle
1

In Schienen 3

löst die undefinierte Methode 'present' aus

    
coulix 26.05.2010 07:29
quelle
1

Ich weiß, das ist eine alte Frage, aber ich habe eine Lösung für Rails 2.3.

Ich habe verlängert Shingara der yield_or Hilfsmethode oben, so dass es jetzt einen Block akzeptieren kann:

%Vor%

und das kann in Ihren Vorlagen verwendet werden:

%Vor%

oder

%Vor%     
tristanm 08.03.2011 21:22
quelle
0
%Vor%     
stopanko 18.03.2015 15:16
quelle
0

Sie können content_for?(:body_id) verwenden, der Code wird ähnlich sein.

%Vor%     
brunodles 21.07.2015 18:36
quelle