路由到特定于用户的索引页面

时间:2013-02-15 02:43:04

标签: ruby-on-rails

我有帖子模型和用户模型。帖子属于用户。在用户/显示页面上,我想链接到此网址:

/users/1/posts

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

我尝试过像

这样的事情

用户/显示

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

文章/索引

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

但这是路由到

/posts.1

并显示属于所有用户的所有帖子。

2 个答案:

答案 0 :(得分:1)

正确的帮助者是user_posts_path(@user)这要求您将邮件资源嵌套在路由中的用户资源下。

在您的帖子控制器中,您需要以下代码:

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

答案 1 :(得分:1)

您发布的链接的网址助手将如下所示:

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

为了做你想做的事,你必须添加正确的路线:

resources :users do
  resources :posts
end

然后,您可以通过运行rake routes任务来查看所有可用的网址助手。他们可能看起来像这样:

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中,可以通过params[:user_id]

的网址访问用户ID

您可能需要查看nested routing

上的导轨指南