我正在尝试从多用户博客实施所有帖子的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>
我不确定我是否正确地写了块。希望这能澄清事情
答案 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。