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;


Спасибо за ответы.
  • Вопрос задан
  • 4436 просмотров
Пригласить эксперта
Ответы на вопрос 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 код напрямую, половину кода съел парсер.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы