2016-09-02 3 views
3

Zum Beispiel habe ich viele ähnliche Seiten. Mit nur einem Unterschied: Auf jeder dieser Seiten (sie haben unterschiedliche Controller) haben sie unterschiedliche Variablen, was für diese html.erb-Datei gilt.Schienen, wie zur Methode html/js hinzufügen?

Zum Beispiel Video-Post html.erb

<% for post in @posts_for_video> 
    here some html 
    and javascript 
    and also ruby code injection 
<% end %> 

Video-Controller:

@posts_for_video = Post.where(photo: true) 

Und meine Fotos Seite:

<% for post in @post_for_photos > 
    same html as video 
    same js as video 
    and same ruby code as video 
<% end %> 

Foto-Controller:

@posts_for_photo = Post.where(video: photo) 

Also meine Frage: Gibt es eine Möglichkeit, html + js + ruby_code zu setzen, zum Beispiel application_controller.rb?

Oder gibt es eine Möglichkeit, Variable an _some.html.erb als Parameter übergeben?

Ich denke, was ich suche ist (in application_controller.rb):

def posts_for_all(post_variable) 
    for post in post_variable 
    html: post.theme 
    js: post.animation 
    ruby: some methods 
    end 
end 
+0

sehen Warum würden Sie Willst du das in 'application_controller.rb' eintragen? Meiner Meinung nach ist es nur klug, Dinge wie Methoden, die die Erkennung von Logins behandeln, zu finden, und herauszufinden, welcher spezifische Benutzer bestimmten Dingen darin entspricht. –

+0

I.E Sie sollten es sauber halten und nur Funktionen behalten, die andere 'Controller' benutzen. –

+0

@Muntasir Alam, über application.rb war es nur als Beispiel. Aber ich rede nicht, Code in jeder html.erb zu wiederholen (und der einzige Unterschied in diesen htmls wird eine Variable sein). Oder mb gibt es eine Möglichkeit, Variablen als Parameter an html.erb zu übergeben? –

Antwort

2

Gesetzt dem gesamten Code in einen Teil? Als Referenz: http://guides.rubyonrails.org/layouts_and_rendering.html

Wäre so etwas wie dieses:

# app/views/shared/_items.html.erb 
<% items.each do |item| %> 
    <!-- html stuff --> 
    <!-- javascript stuff --> 
    <%= # ruby stuff %> 
<% end %> 

Und dann kann man es so, dass in einer anderen Ansicht Render:

# app/views/examples/show.html.erb 
<%= render 'shared/items', items: @items %> 

Ist das, was Sie suchen?

+0

, die es veröffentlichen. Brechen Sie meinen Kopf, während Sie versuchen, es zu lösen. Vielen Dank! –

1

Die Lösung wäre eine Form verwenden Teil

Lets sagen, dass wir eine Fußzeile haben. Wir möchten auf unserer Website zeigen, dass die Website von uns erstellt wurde. Was machen wir? Wir schaffen eine Form Teil des Namens

_footer.html.erb (_ bedeutet, dass dies ein Teil ist, und nicht eine ganze Ansicht wie show.html.erb)

Innerhalb wir

<div class="container"> 
    <footer class="footer"> 
    <small> 
     Copyright &copy;<a href = "https://ca.linkedin.com/in/muntasir-alam-878625114">Muntasir Alam 2016</a> 
    </small> 
    <nav> 
     <nav> 
     <ul> 
      <li><%= link_to 'About', welcome_about_path %></li> 
     </ul> 
     </nav> 
    </nav> 
    </footer> 
</div> 
schreiben

Jetzt müssen wir nur noch render diese Ansicht auf jeder Seite, auf der sie erscheinen soll. Ist das nicht viel besser als das Erstellen von HTML auf jeder Seite?

Was ist mit application_controller.rb?

Jetzt auf die Frage von application_controller.rb, wofür verwenden wir das?

Application ist praktisch die Klasse, die alle anderen Controller in Ihnen Anwendung von erben wird (obwohl dies in jedem Mittel nicht zwingend notwendig ist).

Als Referenz sehen Sie sich meine eigene application_controller.rb Datei in einer meiner eigenen Apps an.

Innerhalb meiner Klasse habe ich

helper_method :current_user, :logged_in? 

    def current_user 
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 

    def logged_in? 
    current_user 
    end 

    def require_user 
    unless logged_in? 
     flash[:danger] = "You must be logged in to perform that action!" 
     redirect_to root_path 
    end 
    end 

Beachten Sie die Struktur. Ich habe einige Code, der von einigen anderen Controllern auf der Grundlage der Überprüfung verwendet wird, ob der aktuelle Benutzer eine bestimmte Aktion tut, oder ob der Benutzer tatsächlich angemeldet ist.

Als Referenz Partials and Layouts

Verwandte Themen