2012-03-10 48 views
4

我已經得到了一個基於樹的導航,我希望通過控制器的各種操作。但是,當我通過單擊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(); 
    }); 
}); 

模型

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(); 
    }); 

回答

0

使用cookies方法在你的導航控制器。要擴展的節點應該在cookie中註冊,例如,

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

,然後在JS端,您可以通過使用可用$.cookie功能在cookie plugin,例如方便地提取節點:

$.cookie('country_id'); 
+0

感謝,我會檢查出來現在 – 2012-03-12 17:11:08

+0

我不能通過使用代碼來維護狀態 – 2012-03-12 17:18:40

+0

是的,在控制器代碼中有一個錯誤 - 我修正了它,希望它現在可以工作。另外我不知道你的導航控制器代碼看起來是什麼樣子,所以我不確定哪個變量應該在cookie中記憶。 – 2012-03-12 17:26:45