Ruby on rails 如何将静态URL重定向到rails资源

Ruby on rails 如何将静态URL重定向到rails资源,ruby-on-rails,Ruby On Rails,我们正在将我们的站点迁移到rails,但是希望/需要维护来自旧站点的URL,并且希望建立一种方法将旧URL重定向到新的rails路由。旧URL的格式如下: /event/something /event/something-else 有没有一种方法可以基于/event设置一个路由,该路由可以获取以下内容的值(即“某物”或“某物”),在DB查找表中查找该值,获取适当的资源id(例如新事件.id),然后重定向到新的Rails url,即/new\u事件/1 我试着做一些事情,比如: get 'ev

我们正在将我们的站点迁移到rails,但是希望/需要维护来自旧站点的URL,并且希望建立一种方法将旧URL重定向到新的rails路由。旧URL的格式如下:

/event/something
/event/something-else
有没有一种方法可以基于
/event
设置一个路由,该路由可以获取以下内容的值(即“某物”或“某物”),在DB查找表中查找该值,获取适当的资源id(例如
新事件.id
),然后重定向到新的Rails url,即
/new\u事件/1

我试着做一些事情,比如:

get 'event/:url_value' => 'my_controller#lookup'
def lookup
  @event = Event.find_by old_url_value: params[:url_value]
  redirect_to event_path(@event), :status => :moved_permanently
end

但是不知道如何访问
:url\u value

的值,您已经完成了一半。在控制器内部,您可以使用
参数[:url\u值]
访问
:url\u值
参数

在对命名约定进行一些假设后,生成的方法将类似于:

get 'event/:url_value' => 'my_controller#lookup'
def lookup
  @event = Event.find_by old_url_value: params[:url_value]
  redirect_to event_path(@event), :status => :moved_permanently
end
不过,谁喜欢在URL中显示ID?为什么不保留URI呢?在表中保留
url\u值
参数,编写
show
方法如下:

def show
  @event = Event.find_by url_value: params[:id]
end
并将此方法添加到事件模型中:

def to_param
  url_value
end
您的路由文件将返回到:

resources :events

有关更多信息和此信息,请参阅。从我链接的同一个问题中,一个好方法是

您只需通过params散列获取传递的新url,并重定向到新事件url:

#in your my_controller

def look_up
  url_value = params[:url_value]
  # look up in the db using url_value
  event = Event.find_by( name: url_value ) # this is dummy code, use you own query to look up in DB and get the related event
  # redirect
  redirect_to "/new_events/#{event.id}"
  # if you have route name like new_events_path, then you can use
  # redirect_to new_events_path(event)
end

太好了!工作完美!谢谢你的帮助@不客气!我很好奇-你最终使用了
to_param
?我实际上没有使用to_param。不过,这可能是以后要实现的。