Я создал приложение для блога, используя 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