2010-10-21 34 views
0

我正在尝试为will paginate插件设置我的路由,所以我没有在页面末尾?page = 1,因此我可以稍后尝试使用页面缓存。Ruby on Rails将分页路由

我一直在浏览网上,我发现一些教程解释使用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

看着你的路线,你可能会穿越两个不同的东西。你在分页什么?如果它是个人资料,则不需要提供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 

让我知道这是否有效。

UPDATE:

您在/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与此,路线更改为命名的路由:

现在,您可以拨打link_to像这样:

link_to profile_browse_path(:id => 1, :page => 10) 
+0

嘿,浏览是配置文件资源的成员。不知道这是否会改变什么? – Brian 2010-10-21 22:33:50

+0

所以,当用户登录配置文件/ 1代表用户。 profile/1/browse只是表示用户在浏览部分 – Brian 2010-10-21 22:37:25

+0

他们浏览了什么,需要进行分页? – 2010-10-21 22:38:35