显示传递参数问题的帖子 - Ruby on Rails

时间:2010-04-15 15:36:12

标签: ruby-on-rails ruby

我使用Ruby on Rails构建了一个博客应用程序。在应用程序中,我有帖子和标签。发布has_many:标签和标签belongs_to:post。

在/views/posts/index.html视图中,我想显示两件事。首先是显示'created_at DESC'的所有帖子的列表,然后在侧栏中我想引用我的标签表,组记录,并显示为允许查看具有该标签的所有帖子的链接。

更新: 显示重复帖子的问题和没有显示标签的帖子已修复。只是想弄清楚,如何处理/ posts?tag_name = foobar请求,以便只显示带有该标签的帖子。

更新代码: 帖子显示正常,没有重复。标签计数工作正常,标签组显示为链接并将tag_name传递给/ posts?tag_name = new。我只是无法获取链接来触发仅显示具有这些标签的帖子。仅供参考,帖子通过post_id在标签表中标识。

PostsController

 def index
    @tag_counts = Tag.count(:group => :tag_name, :order => 'updated_at DESC', :limit => 10)
    @posts = Post.all( :order => 'created_at DESC' ).paginate :page => params[:page], :per_page => 4,
              :conditions => (params[:tag_name] ?
                { :tags => {:tag_name => params[:tag_name]} } : {}
                  )

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @posts }
      format.json { render :json => @posts }
      format.atom
    end
  end

查看

Recently Used Tags
        <table>
            <% @tag_counts.each do |tag_name, tag_count| %> 
                <tr>
                    <td><%= link_to(tag_name, posts_path(:tag_name => tag_name)) %></td>
                    <td>(<%=tag_count%>)</td>
                </tr>
            <% end %>
            </table>
            <br>
            <a href="/tags">click to view all tags >></a>
            </div>

这个屏幕截图可能有所帮助(请注意它只是在处理功能时非常难看)因为它显示新的只有一个标签,但是当URL被点击时,仍然显示所有帖子。

alt text http://gadocidesign.squarespace.com/storage/Screen%20shot%202010-04-15%20at%204.05.13%20PM.png

2 个答案:

答案 0 :(得分:1)

获取所有帖子:

@posts = Post.all.paginate :page => params[:page], :per_page => 5

显示帖子的标签:

<% @posts.each do |post| %>
   <% post.tags.each do |tag| %>
      <%= tag.tag_name %>
   <% end %> 
<% end %>

我相信这就是你想要的。

编辑#1

要在侧栏中显示标签:

<% Tags.count(:group=>"tag_name").each_pair do |key, value| %>
    <% link_name = Tags.find( key ).tag_name %>(<%= value %>)
    <%= your_link %>
<% end %>

这将显示所有标记,其中包含( )之间的帖子数。但我不知道如何建立你的链接......也许如果你提供更多信息,我不知道......你有search方法吗?

无论如何......希望它可以帮助你:]

编辑#2

看看你提出的另一个问题并看到了一些代码,我相信这会解决你的问题:

#view
<% Tags.count(:group=>"tag_name").each_pair do |key, value| %>
   <% tag_name = Tags.find( key ).tag_name %>
   <%= link_to(tag_name+"(#{value})", posts_path(:tag_name => tag_name)) %>
<% end %>

#controller
@posts = Post.all.paginate :page => params[:page], :per_page => 5,
   :conditions => (params[:tag_name] ?
      { :tags => {:tag_name => params[:tag_name]} } : {}
   )

希望现在有效。

答案 1 :(得分:0)

连接将为每一行创建一个单独的条目 - 当您加入tgas上的帖子时,这意味着这些行已成为一种Post + Tag元对象。因此,您将获得每个标签+帖子的后贴标签。

您可能只想提取所有帖子,只需:include =&gt; :标签 这将意味着所有帖子都会出现(无论是否有标签)。

当然,将其与标签条件混合会使其更复杂一些。如果您专门寻找带有给定名称的标签的帖子,则您不太可能找到没有标签的帖子......

如果只有一个标签带有给定的标签名称,那么你可能会做更好的事情:

@posts = Tag.find_by_tag_name(params[:tag_name]).posts