繁体   English   中英

如何使用页面ID /名称加载正确的控制器操作? (Ruby on Rails 4)

[英]How do I use a page id/name to load the correct controller action? (Ruby on Rails 4)

我正在努力解决路由在Rails中的工作原理。 基本上,我正在尝试创建一个简单的CMS。

用户将能够CRUD页面,因此某处必须具有某种动态功能。

我创建了一个具有ID,名称和内容的简单Page模型。

网址将与每个页面名称匹配,以显示每个页面的内容:

  • example.com
  • example.com/about
  • example.com/news
  • example.com/staff

如何将网址与正确的页面匹配?

(我认为解决方案是将页面名称传递给相关的控制器和操作,测试它是否匹配数据库中的任何页面,以及是否显示页面内容)。

规范的解决方案是在模型中重写to_param以返回唯一的,与url兼容的页面名称:

 def to_param
   title.parameterize
 end

这样,所有url助手都会使用此值来构建url:

 page_path(@some_page) # => 'pages/some-page-title'

然后在您的控制器中,您将必须以某种方式实现能够从其参数中获取页面的finder方法(该参数将在params[:id]可用)。 通常是这样的:

 class Page < ActiveRecord::Base

   def self.from_param(param)
     where(title: param).first
   end

   def self.from_param!(param)
     from_param(param) || fail(ActiveRecord::RecordNotFound)
   end

 end

现在,如果要从根路径访问页面,可以执行以下操作:

  Rails.application.routes.draw do 

    resources :pages, path: '/'

  end

谨防 ! 将此路线放置在routes.rb的末尾,否则它将捕获所有内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM