繁体   English   中英

Rails自定义路由不保留URL

[英]Rails custom routing not keeping URL's

我试图将自定义路由添加到我的应用程序,但首先要保持简单。

我希望以这样的网址结尾:

/图库/节假日/美国/加利福尼亚

“假期”,“美国”和“加利福尼亚”分别是我的Collection模型的一个实例。

目前,我还没有实现在URL中使用的标签,因此目前该URL必须为:

/ gallery / 594/595/597

每个数字都是集合的ID。

现在,我将以下路由添加到路由文件中:

get '/gallery/*path' => 'Gallery#splitUrl'

并且相应的操作当前为:

  def splitUrl
    path_parts = params[:path].split('/')

    puts path_parts[1]

    # Deal with last item of the URL
    last_item = path_parts.last

    redirect_to Collection.find(last_item) if (Collection.find_by_id(last_item))
  end

我知道到目前为止它是基本的,但是只是从实现它开始。 它正在重定向到适当的集合。 在上面的代码中,将我带到ID为597的集合中,但是这样做时,地址栏中的URL更改为/ collections / 597。 如何保持/ gallery / 594/595/597样式?

在构建我的应用程序结束时,图库网址应类似于:

/画廊/节假日/美国/加利福尼亚州/第1天

尚未决定是否将自己的照片单独放在页面上,但是如果我这样做,则需要将其放在网址末尾。

我为画廊提供了几种模型:

收藏相册照片尺寸

收藏集可以包含其他收藏集或相册,但不能两者都包含。

我认为我没有以正确的方式来解决这个问题,但是却看不出解决这个问题的正确方法是什么。

我也不希望/ collections / URL正常工作,因为我希望人们不得不使用完整的URL来访问它们。

我尝试告诉splitUrl方法呈现collection#show模板,并创建了它所需的实例变量,但是由于无法定位模板所包含的局部元素以及我的某些样式基于模板,因此模板的呈现失败在控制器名称和操作上失败,因为新的控制器和操作现在为gallery和splitUrl。

如果有人对如何解决这个问题有任何想法,那么我将不胜感激。

使用get '/gallery/:holiday/:country/:state =>'Gallery#splitUrl'

我认为您不需要使用redirect_to ,只需在splitUrl末尾调用一个方法来操作/渲染集合。

如果执行重定向,它将生成另一个发送到浏览器的URL,然后浏览器将要求您的服务器提供新的URL。 如果您的服务器重定向到相同的URL,这将产生一个无限循环。

请参阅http://api.rubyonrails.org/classes/ActionController/Redirecting.html#method-i-redirect_tohttp://en.wikipedia.org/wiki/HTTP_302中的更多内容


使用show方法编辑:

一种方法是您在show方法中管理集合,例如:

def show
  @collection = getCollection
  ...
end

def getCollection
  # find collection by id, if url is like /collection_id
  return Collection.find(param[:id]) if param[:id]

  # find collection with last id, if request is like /id1/id2/id3
  path_parts = params[:path].split('/')
  Collection.find(path_parts.last)
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM