Ruby on Rails: render — отображение меню, корзины на каждой странице сайта?

Добрый вечер! Интересует следующий вопрос, как добавить корзину для интернет-магазина на каждую страницу сайта (корзина как в книге Agile Web Dev), у меня 4 модели — Category, Product, Cart, Post.

layout application.html.erb
<%= render :partial => 'categories/cart', :locals => {:cart => @cart}%>


partial _cart.html.erb
&lt;% if @cart.blank? %&gt;<br/>
&lt;% else %&gt;<br/>
 &lt;% for item in @cart.items %&gt;<br/>
 &lt;%= item.quantity %&gt; × &lt;%=h item.title %&gt;&lt;%= number_to_currency(item.price) %&gt;<br/>
 &lt;% end %&gt;<br/>
Итого: &lt;%= number_to_currency(@cart.total_price) %&gt;<br/>
 &lt;%= button_to 'Очистить корзину', :controller =&gt; 'categories', :action =&gt; 'empty_cart'%&gt;<br/>
&lt;% end %&gt;


При таком раскладе корзина отображается только в представлении контроллера Categories. Не могу понять как достать из сессии session[:cart] или еще каким то образом необходимые данные.


И еще вопрос, как правильно отображать меню на каждой странице, сейчас примерно так:
&lt;%= render :partial =&gt; 'posts/post', :collections =&gt; Post.all %&gt;


Спасибо за ответы.
  • Вопрос задан
  • 4427 просмотров
Пригласить эксперта
Ответы на вопрос 1
@kirsan_vlz
Если вы не можете достать корзину из сессии, то посмотрите внимательнее в книге, откуда брали корзину, метод find_cart:
def find_cart
    session[:cart] ||= Cart.new
end

Если просто проблема в том, чтобы объект корзины назначался в переменную @cart во всех шаблонах, то вынесите метод find_cart в файл application_controller.rb и в этом же файле включите этот метод в before_filter. Тогда у вас корзина будет выгружаться из сессии в переменную @cart во всех контроллерах.
p.s. Не копируйте HTML код напрямую, половину кода съел парсер.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы