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

У меня есть древовидная навигация, которую я хочу использовать для разных действий контроллера. Однако, когда я перехожу к другому действию, щелкнув ссылку 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.