【发布时间】:2014-02-07 02:32:14
【问题描述】:
我正在尝试向我的应用程序添加自定义路由,但首先要保持简单。
我希望得到一个像这样的网址:
/画廊/假期/美国/加利福尼亚
'holiday'、'america' 和 'california' 都是我的 Collection 模型的一个实例。
目前,我还没有实现在 URL 中使用的 slug,所以目前 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 风格?
在构建我的应用程序结束时,图库网址应如下所示:
/gallery/holidays/america/california/day1/
尚未决定是否将单张照片实际放在它自己的页面上,但如果我这样做了,那么它需要位于网址的末尾。
我有几个模型供画廊使用:
集合 专辑 照片 照片尺寸
收藏可以包含其他收藏或专辑,但不能同时包含两者。
我认为我没有以正确的方式解决这个问题,但只是看不出解决这个问题的正确方法是什么。
我也不希望 /collections/ URL 正常工作,因为我希望人们必须通过完整的 URL 才能访问它们。
我已经尝试告诉 splitUrl 方法渲染集合#show 模板并创建了它需要的实例变量,但模板的渲染失败,因为模板包含的部分无法定位,而且我的一些样式基于控制器名称和操作失败,因为新控制器和操作现在是画廊和 splitUrl。
如果有人对如何解决这个问题有任何想法,我将不胜感激。
【问题讨论】:
标签: ruby-on-rails url controller routing