1

我有一个帖子模型和一个用户模型。帖子属于用户。在用户/显示页面上,我想链接到这个 url:

/users/1/posts

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

我试过像

用户/节目

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

帖子/索引

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

但这是路由到

/posts.1

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

4

2 回答 2

1

正确的助手是user_posts_path(@user)这要求您在您的路线中将帖子资源嵌套在您的用户资源下。

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

def index
  @user = User.find(params[:user_id])
  @posts = @user.posts
end
于 2013-02-15T02:44:24.360 回答
1

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

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

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

resources :users do
  resources :posts
end

rake routes然后您可以通过运行任务来查看所有可用的 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 可以通过 url 访问params[:user_id]

您可能想查看有关嵌套路由的 Rails 指南

于 2013-02-15T02:48:19.577 回答