我使用主动管理员在我的表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未定义..有没有办法做到这一点..或者我应该坚持使用我的旧方法