我有一个活动网站需要为列名生成新的网址:当用户在活动管理员中创建活动时定义的域名,http://www.re-work.co/:domains
我有事件模态和events_controller,视图是事件#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
一系列佣金路线,因为所有其他路线都与admin
有关$ 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
所有这些网址'/ events / technology'或'/ events / cities'或'/ cities'或'/ technology'都是同一页面,我是Rails的新手并且已经阅读/观看了rails路由教程,但我可以弄明白了。有人可以帮忙吗?
答案 0 :(得分:1)
那是因为这一行:
match '/:domains' => "events#show"
在&#34; /&#34;之后匹配所有内容并将其指向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