我正在尝试显示所有用户在特定用户页面上制作的“墙贴”,但我无法显示正确的帖子。
用户控制器:
def show
@user = User.find_by_cached_slug(params[:id])
@posts = Post.find_all_by_poster(params[@user.id])
if signed_in?
@post = Post.new
end
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @user }
end
end
发表表格:
<%= form_for @post do |f| %>
<div class="field">
<%= f.text_area :content %>
</div>
<div class="field">
<%= f.hidden_field :user_id, :value => current_user.id %>
</div>
<div class="field">
<%= f.hidden_field :poster, :value => @user.id %.
</div>
<div class="actions">
<%= f.submit "Submit" %>
</div>
<% end %>
当用户创建帖子时,current_user id将作为:user_id
保存在posts表中,并且他们发布的用户页面的用户ID将保存为:poster
。这部分工作正常,但我不明白如何呈现@posts
,以便只显示在该用户页面上发布的帖子。
我正在尝试的方法是以某种方式显示/过滤? :poster
匹配用户页面用户ID的所有帖子;但是,我不知道如何做这项工作或者有更好的方法。有什么帮助吗?
注意:我正在使用slugged gem。在Users / show视图中,我使用<%= render @posts %>
。最后,我希望用户能够对帖子发表评论,如果这会影响任何设计决策。
非常感谢你的帮助!如果需要更多信息,请告诉我。
答案 0 :(得分:1)
我认为这一行是问题所在:
@posts = Post.find_all_by_poster(params[@user.id])
@user
是正在查看墙的用户的记录。 (对吗?)您需要发布到该用户墙的所有帖子,这些帖子都是poster == @user.id
的所有帖子记录。没有必要为此查看params
哈希。我认为这一行应该是:
@posts = Post.find_all_by_poster(@user.id)
如果这不正确,则表示我不清楚您的show
行动是如何起作用的。有两种不同的东西可能是@user
。按照惯例,这应始终指的是连接另一端的人员记录。在您的情况下,它看起来像是指正在查看墙壁的人。这是对的吗?