0

我有一个活动网站,需要为列名生成一个新的 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 路由的片段,因为所有其他路由都与管理员有关

$ 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 路由教程,但我不知道出来。有人可以帮忙吗?

4

1 回答 1

1

那是因为这一行:

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

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

  resources :events

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

编辑:

如果您想要做的是捕获传递的任何内容,/:domains以便在show操作内部使用。然后该参数作为散列的一部分传播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
于 2013-04-20T20:06:04.743 回答