![](/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.