繁体   English   中英

Rails将动态页面路由到友好的URL

[英]Rails routing dynamic pages to friendly url

我有一个活动网站,该网站需要为列名称:domains生成一个新的URL,当用户在活动管理员中创建该事件时即会定义该URL,即http://www.re-work.co/:domains

我有事件模态和events_controller并且视图是events#show

在我的路线文件中

match '/:domains' => "events#show"
  resources :events

我的控制器有这个问题,但我不知道将其更改为什么:

class EventsController < ApplicationController
def show
  @event = Event.where(:domains => request.base_url).first

  if @event.nil?
    @event = Event.first
  end
end

瑞克路线的摘要,就像其他路线一样

$ rake routes

         root            /                                         events#show
       events GET        /events(.:format)                         events#index
              POST       /events(.:format)                         events#create
    new_event GET        /events/new(.:format)                     events#new
   edit_event GET        /events/:id/edit(.:format)                events#edit
        event GET        /events/:id(.:format)                     events#show
              PUT        /events/:id(.:format)                     events#update
              DELETE     /events/:id(.:format)                     events#destroy

所有这些url'/ events / technology'或'/ events / cities'或'/ cities'或'/ technology'都在同一页面上,我是Rails的新手,并且已阅读/观看过Rails路由教程,但我无法确定出来。 有人可以帮忙吗?

那是因为这行:

match '/:domains' => "events#show"

正在匹配“ /”之后的所有内容,并将其指向events#show动作。 该行不是必需的(您可以删除它),因为:

  resources :events

将为事件控制器生成所有默认路由。

编辑:

如果您要执行的操作是捕获在show动作中使用的/:domains传递的内容。 然后,这些参数将作为params散列的一部分传播,例如:

Parameters: {"domains"=>"technology"}

您可以像params[:domains]这样访问它。 在这种情况下,您可以保留第一行:

match '/:domains' => "events#show"
match '/events/:domains' => "events#show" # add this one

resources :events   # <- delete this one, this right now is kind of redundant for what you're trying to do

并更改以下代码:

  @event = Event.where(:domains => params[:domains] ).first

暂无
暂无

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

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