所有用户的所有帖子的Feed

时间:2013-05-21 00:20:10

标签: ruby-on-rails ruby

我正在尝试从多用户博客实施所有帖子的Feed。我想知道在何处定义此方法以及如何将其定义为尽可能“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

我遇到的问题是在视图中显示帖子用户名。例如,这可以工作,但只显示帖子attibutes:

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

我不确定我是否正确地写了块。希望这能澄清事情

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

您应该访问错误的网址。

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

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

user_posts_path(an_user_instance)

我想你有路线:

resources :users do
  resources :posts
end

答案 2 :(得分: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。