Отображение сообщений о пропущенном параметре - Ruby on Rails - PullRequest
1 голос
/ 15 апреля 2010

Я создал приложение для блога, используя Ruby on Rails. В приложении у меня есть посты и теги. Post has_many: тэги и тэг принадлежит_ к: посту.

В представлении /views/posts/index.html я хочу отобразить две вещи. Во-первых, это список всех сообщений, отображаемых как «create_at DESC», а затем на боковой панели я хочу сослаться на свою таблицу тегов, групповые записи и отобразить ее в виде ссылки, позволяющей просматривать все сообщения с этим тегом.

UPDATE: Исправлена ​​проблема с отображением дублированных сообщений и сообщений без тегов. Просто сейчас пытаюсь понять, как обработать запрос / posts? Tag_name = foobar, чтобы отображались только сообщения с этим тегом.

ОБНОВЛЕННЫЙ КОД: Сообщения отображаются правильно, без дублирования. Счетчик тегов работает правильно, и группы тегов отображаются в виде ссылок и передают имя тега в / 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

View

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>

Этот снимок экрана может помочь (пожалуйста, обратите внимание, что он действительно уродлив, просто работает над функцией), так как он показывает, что есть только 1 тег в новом, но при нажатии на URL все еще отображаются все сообщения.

альтернативный текст http://gadocidesign.squarespace.com/storage/Screen%20shot%202010-04-15%20at%204.05.13%20PM.png

Ответы [ 2 ]

1 голос
/ 15 апреля 2010

Чтобы получить все сообщения:

@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]} } : {}
   )

Надеюсь, что это работает сейчас.

0 голосов
/ 15 апреля 2010

Объединение создаст отдельную запись для каждой строки - и когда вы присоединяетесь к сообщениям в tgas, это означает, что строки стали своего рода мета-объектом Post + Tag. Таким образом, вы получите пост-тэг для каждого тега + пост.

Вы, вероятно, просто хотите извлечь все сообщения и просто: include =>: tags Это будет означать, что все сообщения будут отображаться (независимо от того, есть ли на них тег).

Конечно, смешивание с условиями тегов делает его немного более сложным. Вы вряд ли найдете сообщения без тегов, если вы специально ищете сообщения с тегами с указанным именем ...

Если есть только один тег с данным именем тега, возможно, вам лучше сделать что-то вроде:

@posts = Tag.find_by_tag_name(params[:tag_name]).posts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...