我正在尝试为will paginate插件设置我的路由,所以我在url的末尾没有?page = 1,所以我稍后可以尝试使用页面缓存。
我一直在网上浏览,我发现一些教程解释使用map.connect,但是,我无法使用我的应用程序。
以下是一个示例网址:http://localhost:3000/profile/1/browse?page=1
这是我到目前为止所获得的路线代码:
map.connect '/profile/:id/browse/:page',
:controller => 'profiles',
:action => 'browse',
:id => /\d+/,
:page => /\d+/
这不起作用。有没有人有任何建议?
我认为map.connect是模式匹配,但也许我错过了一些东西。
谢谢,
答案 0 :(得分:0)
看着你的路线,你可能正在穿越两件不同的东西。你有什么分页?如果是配置文件,则无需提供ID。我们假设您正在尝试对配置文件进行分页。你的路线看起来像这样:
map.connect '/profiles/browse/:page',
:controller => 'profiles',
:action => 'index',
:page => /\d+/
你的控制器动作看起来像这样:
def index
@profiles = Profile.paginate :page => params[:page]
end
如果您尝试在个人资料中嵌套内容,比如浏览个人资料的图片,则需要更多这样做:
map.connect '/profiles/:id/browse/:page',
:controller => 'profiles',
:action => 'index',
:id => /\d+/,
:page => /\d+/
与你的控制器一样:
def index
@profile = Profile.find(params[:id])
@pictures = @profile.pictures.paginate :page => params[:page]
end
让我知道这是否有效。
更新:
您在评论中列出/profile/1/
指的是用户自己的个人资料。首先,这是危险的,因为您不希望人们更改应用程序认为它们的配置文件,只需手动更改该ID号。依靠您的身份验证为您提供的任何current_user
方法。
但是,以当前设置为例,这就是它的样子:
map.connect '/profiles/:id/browse/:page',
:controller => 'profiles',
:action => 'browse',
:id => /\d+/,
:page => /\d+/
与你的控制器一样:
def browse
@profile = Profile.find(params[:id])
@profiles = Profile.paginate :page => params[:page]
end
如果您仍有疑问,请与我联系。
更新2
为了获得一个好的link_to
,请将路线更改为指定的路线:
map.profile_browse '/profiles/:id/browse/:page',
:controller => 'profiles',
:action => 'browse',
:id => /\d+/,
:page => /\d+/
现在您可以这样致电link_to
:
link_to profile_browse_path(:id => 1, :page => 10)