2013-02-15 50 views
1

我有一个帖子模型和一个用户模型。帖子属于用户。在users/show页面上我想链接到这个url:路由到特定于用户的索引页面

/users/1/posts 

在这个页面上,我将显示用户创建的所有帖子。

我试过的东西

用户/显示

<%= link_to "Posts", posts_path(@user) %> 

帖/指数

<% @posts.each do |post| %> 
    <li> 
    <%= link_to post.title, post %> 
    </li> 
<% end %> 

但这路由到

/posts.1 

和显示所有帖子属于 全部用户。

回答

1

正确的帮手是user_posts_path(@user)这需要你的帖子资源嵌套在你的用户资源中。

在自己的帖子控制器,你需要这样的代码:

def index 
    @user = User.find(params[:user_id]) 
    @posts = @user.posts 
end 
+0

感谢的人,很大的帮助。 – colmtuite 2013-02-15 02:48:48

+0

顺便说一句,我应该保持我的索引文件在我的帖子文件夹或我的用户文件夹? – colmtuite 2013-02-15 02:50:07

+0

如果'index file'指的是索引视图,那么它应该放在你的文章视图文件夹中。默认情况下,任何'posts_controller.rb'操作都将在'app/views/posts'中查看视图。 – Max 2013-02-15 02:53:36

1

的URL帮手你贴看起来像这样的链接:

user_posts_path(@user) # => /users/123/posts 
user_post_path(@user, @post) # => /users/123/posts/1 

为了做你想做,你将有什么添加正确的路由:

resources :users do 
    resources :posts 
end 

然后,您可以通过运行来查看所有可用的url助手任务。他们可能是这样的:

users_path GET /users(.:format)       users#index 
user_path GET /user/:id(.:format)      users#show 
... 
user_posts_path GET /users/:user_id/posts(.:format)  posts#index 
user_post_path GET /user/:user_id/posts/:id(.:format) posts#show 
...  

注意,在tasks_controller,用户ID将与params[:user_id]

从URL访问你可能想看看在轨道导向上nested routing