Поддержание состояния моих навигационных направляющих на основе дерева

У меня есть древовидная навигация, которую я хочу использовать для разных действий контроллера. Однако, когда я перехожу к другому действию, щелкнув ссылку link_to, моя древовидная структура рушится.

Как я могу поддерживать состояние?

Вот код, если это необходимо: -

.three.columns
 %ul(class = "continent_name")
 - @destinations.group_by(&:continent).each do |continent, ds_per_continent|
 %li=link_to continent, "#"
 %ul(class = "country_name")
 - ds_per_continent.group_by(&:country).each do |country, ds_per_country|
 %li=link_to country, "#"
 %ul(class = "city_name")
 - ds_per_country.each do |destination|
 %li=link_to destination.name, destination_path(destination)

Когда я иду на путь назначения, я хочу, чтобы название страны было видимым, а не все рушилось. Как это можно сделать?

Код контроллера

class DestinationsController < ApplicationController
 before_filter :find_destination, :except => [:index]
 before_filter :all_destinations
 def index 
 end
 def show
 @photos = @destination.destination_photos.all
 cookies['destination_id'] = params[:id]
 end
 def photos_videos
 @photos = @destination.destination_photos.all
 end
 def topic_blog
 @topics = Topic.all
 end
 private
 def find_destination
 @destination = Destination.find(params[:id])
 end
 def all_destinations
 @destinations = Destination.all
 cookies['destination_id'] = params[:id]
 end
end

Код JS

$(document).ready(function(){
 $('.country_name').hide();
 $('.city_name').hide();
 $('li').click(function() {
 $(this).next('ul').toggle();
 });
 $('.city_name').click(function(){
 $('.destination').append();
 });
});

Model

class Destination < ActiveRecord::Base
 alias_attribute :city, :name
 validates :continent, :presence => true
 validates :country, :presence => true
end

Jquery

$('.country_name').hide();
 $('.city_name').hide();
 $('li').click(function() {
 $(this).next('ul').toggle();
 });
 $('.city_name').click(function(){
 $('.destination').append();
 });
1 ответ

Используйте метод cookies в вашем навигационном контроллере. Расширение node для расширения должно быть зарегистрировано в файле cookie, например

cookies['country_id'] = params[:country_id]

И затем на стороне JS вы можете легко извлечь node с помощью функции $.cookie, доступной в плагине cookie, например:

$.cookie('country_id');

licensed under cc by-sa 3.0 with attribution.