![](/img/trans.png)
[英]How do I use Ruby refinements inside Rails Controller/Action?
[英]How do I use a page id/name to load the correct controller action? (Ruby on Rails 4)
我正在努力解决路由在Rails中的工作原理。 基本上,我正在尝试创建一个简单的CMS。
用户将能够CRUD页面,因此某处必须具有某种动态功能。
我创建了一个具有ID,名称和内容的简单Page模型。
网址将与每个页面名称匹配,以显示每个页面的内容:
如何将网址与正确的页面匹配?
(我认为解决方案是将页面名称传递给相关的控制器和操作,测试它是否匹配数据库中的任何页面,以及是否显示页面内容)。
规范的解决方案是在模型中重写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.