Rails的REST风格的路由以“/”和蛞蝓
-
18-09-2019 - |
题
我希望做类似的东西一个WordPress塞在那里我有一个像这样同时保持REST风格的路由选择的网址:
http://foo.com/blog/2009/12/04/article-title
我感兴趣的保持RESTFUL路由的原因是,我不能因为我使用自定义的航线使用很多的插件。
我已经做REST式外观:
map.connect '/blog/:year/:mon/:day/:slug',
:controller => 'posts', :action => 'show',
:year => /\d{4}/, :month => /\d{2}/,
:day => /\d{2}/, :slug => /.+/,
:requirements => { :year => /\d{4}/, :month => /\d{2}/, :day => /\d{2}/, :slug => /.+/ }
在为了写入链接,我不得不编写自定义的link_to助手来产生正确的网址。我真的想使这个REST风格,并拥有的link_to post_path(@post)产生上述网址和的link_to edit_post_path(@post)...文章标题/编辑
我也有:的has_many => [:注释]和我愿意到正常工作。我已经试过的link_to是这样的:
'posts', :action => 'show', :year => recent_post.datetime.year.to_s,
:month => sprintf('%.2d', recent_post.datetime.mon.to_i),
:day => sprintf('%.2d', recent_post.datetime.mday.to_i),
:slug => recent_post.slug %>
和产生的(这是不我想要的):
http://foo.com/posts/show?day=30&month=11&slug=welcome-to-support-skydivers&year=2009
我不知道我做错了。它甚至有可能做到这一点?
解决方案
我想是因为你没有使用自定义路径它不工作。我做这一切的时候。我简单地设置一个简单的自定义路线:
map.present_page '/blog/:year/:month/:day/:slug',
:controller => 'posts', :action => 'show'
那么你应该能够做到:
present_page_path(:year => 2009,
:month => "December",
:day => "13",
:slug => "just-an-example")
你得到一个查询字符串的原因很可能是因为轨道不是让无论出于何种原因,以你的路线连接。明确使用命名的路由告诉Rails使用这条路线。让我知道是否能解决它为您服务!
其他提示
下面就是我如何去这个...
首先,我并不试图使用路线生成的URL方法。另外,我也不会相同的程度,你在检查日期参数的格式条款。由于我是自动生成的日戳和URL创建的,我不关心格式的有效性,我只是格式化的ActiveSupport :: TimeWithZone对象。
让我们开始与相关的路线:
map.post_by_date 'content/:year/:month/:day/:slug',
:controller => 'posts',
:action => 'show_by_date_slug'
由于我不想担心参数格式化,或者重复,我创建一个辅助方法和包括在相关控制器助手:
def pubdate_slug_url(post)
year = post.published_on.strftime('%Y')
month = post.published_on.strftime('%m')
day = post.published_on.strftime('%d')
url = "/" + ["content", year, month, day, post.slug].join("/")
return url
end
最后,我认为,我只需调用方法,传递在我的Post对象:
<h2><%= link_to post.headline, pubdate_slug_url(post) %></h2>
我结束了一个URL,如: http://wallscorp.us/content / 2009/12/06 /链接
干杯。
不隶属于 StackOverflow