2015-04-03 24 views
1

我是rails新手,并试图帮助解决问题。Ruby中的自定义路由

我需要为访客用户设置一个自定义路由,以查看来自特定子域的公共内容。即当访客用户转到subdomain.myapp.com时,他们将看到访客内容,如果他们登录,他们将看到特定于其角色的内容并添加内容。所以,我已经建立了以下路线:

match '/', to: "lessons#custom", constraints: { subdomain: 'hbec2' }, via: [:get] 

    match '/', to: 'home#index', constraints: { subdomain: 'www' }, via: [:get] 
    root :to => "home#index" 

    get "welcome" => "lessons#welcome", :as => "welcome" 

    constraints subdomain: 'hbec2' do 
    resources :home do 
     collection do 
     get '/lessons/:lesson_category_id', to: 'lessons#custom', as: 'lessons' 
     get "custom" 
     get "load_categories" 
     get "load_subcategories" 
     get "load_child_subcategories" 
     end 
    end 
    end 

    constraints subdomain: 'www' do 
    resources :home do 
     collection do 
     get "sub_categories" 
     get "categories" => "lessons#welcome" 
     get "welcome" 
     end 
    end 
    end 

目前,当用户去hbec2.myapp.com他们得到期望的结果,因为它的路线是在我的教训控制器我的自定义功能,使我的自定义.html.erb。但是,当他们点击自定义视图中的链接时,它们将被重定向到index.html.erb而不是保留在该视图上,该视图具有部分html来呈现结果。

我所希望的是他们会留在custom.html.erb中,所以我添加了额外的资源获得'/ lessons /:lesson_category_id',以:'lessons#custom',如:'lessons'希望是它会寻找的。但没有运气。这里是我的自定义功能从控制器和自定义视图

自定义功能(这个想法是为来宾用户提供信息。来宾用户属于HBEC组织,因此他们登录到hbec.myapp.com并获得正确的结果(hbec的类别列表和hbec最近的课程列表),当单击课程类别时,应该向他们显示该类别中的课程(查询返回正确的结果,因为课程是最近的,当您单击类别它说什么也没有),而是显示他们什么都没有。因为它去,而不是停留在custom.html.erb

def custom 
    params[:per_page] = 5 
    @organization = Organization.find_by_id(HBEC_ORG_ID) 
    @organization_categories = [] 
    @categories = LessonCategory.all 
     @organization_categories = @categories.where("organization_id = #{HBEC_ORG_ID}") 
    @categories = @categories.where("organization_id = #{HBEC_ORG_ID}").limit(15) 

    @lesson_category = LessonCategory.find_by_id(params[:lesson_category_id]) unless params[:lesson_category_id].blank? 
    @lesson_subcategory = LessonSubCategory.find_by_id(params[:lesson_sub_category_id]) unless params[:lesson_sub_category_id].blank? 

    keyword = params[:keyword] unless params[:keyword].blank? 
    @lessons = Lesson.scoped 
    # @lessons = @lessons.where("is_disable = ? ", false) 
     @lessons = @lessons.where("organization_id = #{HBEC_ORG_ID}") 


    @lessons = @lessons.where(["lessons.id = ? OR lessons.name LIKE ? ", keyword.to_i, "%#{keyword}%"]) unless keyword.blank? 
    @lessons = @lessons.where(["lesson_category_id = ?", params[:lesson_category_id]]) unless params[:lesson_category_id].blank? 
    @lessons = @lessons.where(["lesson_sub_category_id = ?", params[:lesson_sub_category_id]]) unless params[:lesson_sub_category_id].blank? 

    params[:page] = 1 if params[:page].blank? 
    max_pages = (@lessons.count/per_page.to_i).to_i + 1 
    params[:page] = max_pages if params[:page].to_i > max_pages 
    @lessons = @lessons.order(sort_column + ' ' + sort_direction + ', lessons.created_at DESC').paginate(:per_page => per_page, :page => params[:page]) 
    @current_page = params[:page] 
    @toal_pages = max_pages 
    end 

custom.html.erb

0至index.html.erb,
<div class="pages page-work gray-bg medium-grey" id=""> 
    <div class="container"> 
    <!-- Header --> 
    <header> 
     <div class="span-12"> 
     <div class="span7 lesson_header"> 
      <%= render "/lessons/breadcrum" %> 

     </div> 
     <div class="span5 pull-right lesson_header"> 
      <%= render "lessons/lesson_header" %> 
     </div> 
     </div> 
    </header> 
    <!-- End Header --> 


    <!-- Article --> 
    <article class="showdetail"> 


     <div><%= render "shared/flash_messages" %></div> 
       <%= render "/organizations/organization_categories", :organization => @organization, :organization_categories => @organization.lesson_categories %> 
    </article> 


<!-- recommended not necessary for hbec 
    <%= render :partial => "/lessons/recommended" %> 
--> 
    <p class="adjust">Most Recent Lessons</p> 
    <ul class="cat_thumbnails plugin-filter-elements portfolio-items" id="items"> 
     <% if @lessons.present? %> 
      <% @lessons.each do |lesson| %> 
       <li class="col-sm-4 lessonpad mix illustration li-back"> 
       <a href="<%= "#{lesson_path(lesson)}" %>"> 
        <!-- Portfolio image --> 
        <% avatar = (lesson.image.present? ? "#{lesson.image.url}" : "/assets/placeholder_01.png") %> 
        <img src="<%= avatar %>" alt="Treble" class="recent-lessons-icon"> 

        <!-- Portfolio name, activated on hover --> 
        <h3 align="center" class="category-text"><%= lesson.title %></h3> 
       </a> 
       <%= render "latest_lessons", :lesson => lesson %> 
       </li> 

      <% end %> 
     <% else %> 
      <% 
      category_or_subcategory_name = "" 
      category_or_subcategory_name = " '#{@lesson_category.name}' " if @lesson_category.present? 
      category_or_subcategory_name = " '#{@lesson_subcategory.name}' " if @lesson_subcategory.present? 
      %> 
      <h3 class="error"> No <%= category_or_subcategory_name %> from custom Lessons were found</h3> 
     <% end %> 

    </ul> 
    <% if @lessons.present? && @current_page.to_i < @max_pages.to_i %> 
     <div class="center loadmore"> 
      <button class="btn btn-success load_more" onclick="load_more('/lessons', 'lessons')">Load More</button> 
     </div> 
    <% end %> 



    <% if @categories.present? %> 
     <p class="adjust">Choose a Category for Lessons</p> 
     <ul class="cat_thumbnails plugin-filter-elements portfolio-items" id=""> 
      <% @categories.each do |cat| %> 
       <li class="category-li col-sm-4 subpad mix illustration <%= cat.slag %> "> 

       <% link = cat.lesson_sub_categories.present? ? "/home/sub_categories?id=#{cat.id}" : " #{lessons_url(:lesson_category_id => cat.id)}" %> 

       <a href="<%= link %>"> 
        <!-- Portfolio image --> 
        <% avatar = (cat.avatar.present? ? "#{cat.avatar.url}" : "/assets/placeholder_01.png") %> 
        <img src="<%= avatar %>" class="choose-category-icon"> 

        <!-- Portfolio name, activated on hover --> 
        <h3 align="center" class="category-text"><%= cat.name %></h3> 
       </a> 
       <br> 
       </li> 
      <% end %> 
     </ul> 
    <% end %> 

    <% if @categories.present? && LessonCategory.all.count > 5 %> 
     <div class="center"> 
      <button class="btn btn-success load_more" onclick="window.location.href = '/home/categories'">Load More 
      </button> 
     </div> 
    <% end %> 
    </article> 


    </div> 
</div> 
<%= hidden_field_tag :total_pages, @toal_pages %> 
<%= hidden_field_tag :current_page, @current_page %> 

回答

0

所以事实证明,我的问题不得不做失去岗位的实例变量和得到的,所以确保我的自定义控制器的方法解决了这个问题,每次页面重新加载执行,所有我不得不添加了:

的before_filter:定制

这保证了作为来宾导航的教训被刷新。

可能不是正确的方法,但是,它实现了我的愿望的效果,欢迎任何额外提醒

感谢