Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails将动态页面路由到友好url_Ruby On Rails_Ruby_Routing_Routes - Fatal编程技术网

Ruby on rails Rails将动态页面路由到友好url

Ruby on rails Rails将动态页面路由到友好url,ruby-on-rails,ruby,routing,routes,Ruby On Rails,Ruby,Routing,Routes,我有一个事件网站,需要为列名生成一个新的url:当用户在活动管理中创建事件时定义的域,即 我有事件模式和事件控制器,视图是事件显示 在我的路由文件中,我有 match '/:domains' => "events#show" resources :events 我的控制器有这样一个问题,但我不知道如何更改: class EventsController < ApplicationController def show @event = Event.where(:domain

我有一个事件网站,需要为列名生成一个新的url:当用户在活动管理中创建事件时定义的域,即

我有事件模式和事件控制器,视图是事件显示

在我的路由文件中,我有

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

所有这些URL“/events/technology”或“/events/cities”或“/cities”或“/technology”都在同一个页面上,我是Rails新手,读过/看过Rails路由教程,但我搞不懂。有人能帮忙吗?

那是因为这行:

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

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

编辑:

如果您想做的是捕获作为
/:域传递的内容,以便在
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

谢谢你的回复,我已经删除了这一行,但没有任何改变。无论键入什么url,我只看到相同的事件。我错过了一些真正基本的东西吗?你能用以下命令的输出更新这个问题吗:
rake routes
?这基本上告诉您应用程序中有可用的路由。当然,我已经在上面添加了它,我认为问题在于控制器和“第一个”要做什么,尽管我还不知道。谢谢你的帮助!因此,本质上,如果您输入以下url:
/events/technology
行为应该是什么?查找第一个事件,其中domain=>“technology”并显示它?如果我输入/events/technology,我希望看到带有domain“technology”的事件,如果我输入/events/cities,我希望看到带有domain“cities”的事件,但目前无论输入什么url,我都只看到技术事件。我不想要这个“第一”控件,但我不知道要用什么替换它(如果有的话)?
Parameters: {"domains"=>"technology"}
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