簡體   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