Ruby on Rails中的模型关系

时间:2014-05-20 06:24:14

标签: ruby-on-rails ruby

我使用主动管理员在我的表CustomPage以及MenuItem中添加一行。 这是我的菜单模型

class MenuItem < ActiveRecord::Base
  belongs_to :custom_page
  after_create :set_url
  def set_url
    @menu_item = MenuItem.all
    url = "/pages/"+@menu_item.last.name.split(" ").join("_")
    @menu_item.last.update(url:url)
end

这是我的自定义页面模型

    class CustomPage < ActiveRecord::Base
      has_many :menu_items
      after_create :set_custom_url

      def set_custom_url
        @custom_page = CustomPage.all
        url = "/pages/view/"+@custom_page.last.page_name.split(" ").join("_")
        @custom_page.last.update(url:url)  
      end
    end

这是我的控制器

class CustomPageController < ActionController::Base
  layout 'calculator'
  def load_content
    @menu_item = MenuItem.where(url: "/pages/"+params[:page_name])
    if @menu_item.first.custom_page.present?
      @description = @menu_item.first.custom_page.description
    else  
      @description = "CUSTOM PAGE NOT FOUND..."  
    end
  end

  def show_custom_page
    @custom_view = CustomPage.where(url: "/pages/view/"+params[:page])
    if @custom_view.first.present?
      @description = @custom_view.first.description      
    end
  end
end

我的路线是

get '/pages/:page_name' => 'custom_page#load_content'
get '/pages/view/:page' => 'custom_page#show_custom_page'

一个是我可以创建一个菜单项并链接到任何创建的自定义页面。这样当我点击一个菜单并查看相应的自定义页面时。通过这种方式,我可以创建任何数量的自定义页面,这些页面不会显示在前端..

第二条路线是因为我想要查看未与菜单项链接的已创建的自定义自定义页面。我可以通过将custom_pages表中的url复制到浏览器中来查看页面..

当我这样做时,我需要两个视图页面,两个控制器方法..和两个路径。

有什么方法可以在单一路线中制作..单个方法和单个视图.. 到目前为止,我已经尝试过..  在我的控制器中

def load_content
        @menu_item = MenuItem.where(url: "/pages/"+params[:page_name])
        @custom_page = CustomPage.where(url: "/pages/"+params[:page_name])
        if @menu_item.first.custom_page.present?
          @description = @menu_item.first.custom_page.description
        elsif @custom_page.first.present?
          @description = @custom_page.first.description
        else
          @description = "CUSTOM PAGE NOT FOUND..."  
        end
      end

我从控制器中删除了所有其他代码并删除了第二个路径和第二个视图。

但是我在第if @menu_item.first.custom_page.present?行时遇到错误,当我尝试通过网址加载它时.. custom_page未定义..有没有办法做到这一点..或者我应该坚持使用我的旧方法

0 个答案:

没有答案