【问题标题】:Rails routing dynamic pages to friendly urlRails 将动态页面路由到友好的 url
【发布时间】:2013-04-20 20:02:27
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails ruby routing routes


    【解决方案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
    

    【讨论】:

    • 感谢您的回复,我已删除该行但没有任何改变。无论我输入什么网址,我都只会看到相同的事件。我错过了一些非常基本的东西吗?
    • 您能否使用以下命令的输出更新问题:rake routes?这基本上告诉您应用程序中可用的路由。
    • 当然,我已经在上面添加了,我认为问题与控制器和“第一个”有关,虽然我并不知道。感谢您的帮助!
    • 那么本质上,如果你输入下面的url:/events/technology应该是什么行为?查找 domain => "technology" 的第一个事件并显示它?
    • 如果我输入 /events/technology 我想查看域“technology”的事件,如果我输入 /events/cities 我想查看域“cities”的事件但在无论我输入什么网址,我都只能看到技术事件。我不想要这个“第一个”控件,但我不知道用什么来替换它?
    猜你喜欢
    • 2011-11-21
    • 2015-12-10
    • 2023-03-16
    • 1970-01-01
    • 2012-10-06
    • 2011-10-26
    • 2020-08-13
    • 1970-01-01
    • 2011-12-24
    相关资源
    最近更新 更多