Bonjour,
Je cherche le moyen d'appeller une action d'un controller depuis une vue.
Je m'explique:
J'ai une sidebar dynamique, avec affichage des derniers articles. Hors je ne veux pas créer une variable @last_articles sur chaque action de tout mes controllers ...
Ce que je voudrai faire, c'est appeller la methode sidebar de mon controller depuis la vue. (Et y foutre un cache 1h, mais ça, je sais faire ;))
J'ai essayé d'utiliser les helpers, comme ci-dessous
class PagesController < ApplicationController
helper_method :sidebar
[...]
def index()
[...]
end
def sidebar
@articles_aside = Article.where("available_from > ?", Time.now).order(available_from: :desc).limit(@aside_count_art)
end
end
Et d'appeller la methode sur ma vue (ici, le layout)
[...]
<div class="container">
<%# Affichage contenu %>
<%= yield %>
<%# Affiche la sidebar, toutes mes tentatives %>
<%= render(:template => "pages#sidebar") unless defined?(@hide_aside) && @hide_aside == true %>
<%= render(:template => "pages/sidebar") unless defined?(@hide_aside) && @hide_aside == true %>
<%= sidebar() unless defined?(@hide_aside) && @hide_aside == true %>
<%= render(sidebar()) unless defined?(@hide_aside) && @hide_aside == true %>
</div>
[...]
Voilà, je ne sais pas si finalement c'est possible avec Rails 5, ou s'il existe une autre méthode pour faire ça.
Si ce n'est toujours pas clair, voilà la version symfony2 de ce que j'essaye de faire ici :
{{ render(controller('ArticleBundle:Article:sidebar')) }}
Merci :)
Bonsoir,
Ce n'est pas possible de le faire avec un before_filter au niveau de application_controller?
class ApplicationController < ActionController::Base
before_filter :load_latest_articles
def load_latest_articles
@last_articles = Article.order('created_at DESC').limit(....)
end
end
Et ainsi tu peux accéder à tes articles dans toutes les vues.
Bien cordialement,
TD
Sinon HS mais tu peux utiliser les cells si tu connais (notament sur CakePHP).
ça te permet de faire directement une sidebar avec tes articles accessible facilement :
https://github.com/apotonick/cells
Bonjour.
Dans la documentation de Ruby on Rails, il y a ceci : Layouts and Rendering in Rails » Rendering an Action's Template from Another Controller, ceci devrait donc répondre à ta question.
J'avais déjà vu cette doc, mais il semble qu'il s'agit d'appeller un controller depuis un controller. Hors je veux pouvoir appeller depuis une vue/layout.
En effet, ça permet de rendre le résultat de l'action d'un controlleur dans la vue d'un autre controlleur, désolé de ne pas avoir répondu à ta demande correctement.
Ne connaissant que trop peu Ruby on Rails, je laisse les connaisseurs te répondre.