0

我正在尝试实现来自多用户博客的所有帖子的提要。我想知道在哪里定义此方法以及如何将其定义为尽可能“RESTFUL”。

我正在考虑将其放在帖子索引视图中,但问题是我无权访问创建该帖子的用户名属性。索引操作当前看起来像这样

def index
 @posts = Post.all
end

并这样做:

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

引发错误“找不到没有 ID 的用户”

应用信息:我有一个用户资源和一个帖子资源(嵌套在用户中)。差不多就是这样。谢谢

澄清:

感谢大家迄今为止的帮助。我的控制器索引动作定义如下

def index
 @users = User.all
 @posts = @users.collect { |user| user.posts }.flatten
end

我遇到的问题是在视图中显示帖子用户名。例如,这有效,但仅显示帖子属性:

<% @posts.each do |post| %>
<ul>
    <li> <%= post.title %>
         <%= post.content %>
         <%= user.name %> or <%= @user,name %> #This does not work
         </li>
</ul>

我不确定我是否正确编写了该块。希望这可以澄清事情

4

3 回答 3

3

你可以这样做:

def index
  @posts = Post.includes(:user)
end

# view
<ul>
<% @posts.each do |post| %>
  <li>
    <%= post.title %>
    <%= post.content %>
    <%= post.user.name %>
  </li>
<% end %>
</ul>
于 2013-05-21T01:29:03.323 回答
0

您应该访问了错误的 URL。

首先,在您的服务器控制台中检查您的参数,您应该看不到user_idparam。

要设置此参数,请使用正确的路线

user_posts_path(an_user_instance)

我想你有路线:

resources :users do
  resources :posts
end
于 2013-05-21T00:29:51.470 回答
0

首先,您需要查询您想要的用户...

def index
# For example...
@users = User.all # or...
@users = User.find_by_group_id(params[:group_id]) # etc...

# Then, from your users, you need to collect the posts...
@posts = @users.collect { |user| user.posts }.flatten
end

这将获得每个用户帖子的数组,然后将其展平为单个数组。此时,您可以将数组排序为您想要的任何内容。

我不知道您到底在寻找什么,但这些只是一些想法。根据您的应用程序的结构(以及用户组的组织方式),您可能希望使用某种嵌套资源,例如张贴的 juanpastas。

于 2013-05-21T00:58:42.613 回答