如何在用户页面上显示“墙贴”?

时间:2011-04-08 03:06:52

标签: ruby-on-rails ruby ruby-on-rails-3

我正在尝试显示所有用户在特定用户页面上制作的“墙贴”,但我无法显示正确的帖子。

用户控制器:

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 %>。最后,我希望用户能够对帖子发表评论,如果这会影响任何设计决策。

非常感谢你的帮助!如果需要更多信息,请告诉我。

1 个答案:

答案 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。按照惯例,这应始终指的是连接另一端的人员记录。在您的情况下,它看起来像是指正在查看墙壁的人。这是对的吗?