Commit d4d844dc1cad1c55888342b8dc8dc9683efffbe3

Show related posts on posts/show

Commit diff

app/models/post.rb

 
1717 end
1818 end
1919
20 def related_posts
21 Post.search(:limit => 4, :conditions => {:tag_list => tag_list.join("|")}).reject {|x| x == self }.first(3)
22 end
23
2024 before_validation :generate_slug
2125 before_validation :set_dates
2226 before_save :apply_filter
toggle raw diff

app/views/posts/show.html.erb

 
1313 </li>
1414 <% end -%>
1515</ol>
16<div class="related">
17 <% if @post.related_posts.empty? -%>
18 <p>Hungry for more? Head on over to the <%= link_to("archives", archives_path) %>.</p>
19 <% else -%>
20 <p>Hungry for more? Try these <strong>related posts</strong>, or find more in the <%= link_to("archives", archives_path) %>.</p>
21 <ul>
22 <% @post.related_posts.each do |post| -%>
23 <li><%= link_to(h(post.title), post_path(post)) %></li>
24 <% end -%>
25 </ul>
26 <% end -%>
27</div>
1628<h2>Post a comment</h2>
1729 <% unless @comment.errors.empty? -%>
1830 <div class="errors">
toggle raw diff

public/stylesheets/rhnh-standard.css

 
433433 overflow: auto;
434434}
435435
436/* Post */
437
438.related {
439 background-color: #f8f8f8;
440 border: 1px solid silver;
441 padding: 5px;
442 padding-left: 10px;
443}
444
445.related ul, .related p {
446 margin: 0px;
447 padding: 0px;
448}
449
450.related ul {
451 margin-left: 15px;
452}
436453
437454/* Syntax */
438455
toggle raw diff

spec/models/post_spec.rb

 
151151 end
152152end
153153
154describe Post, '#related_posts' do
155 it 'returns first 3 related posts, excluding the post' do
156 post = Post.new
157 post.stub!(:tags).and_return([
158 mock_model(Tag, :name => 'robot'),
159 mock_model(Tag, :name => 'heart')
160 ])
161 Post.should_receive(:search).with(:limit => 4, :conditions => {:tag_list => 'robot|heart'}).and_return([post, 1, 2, 3, 4])
162 post.related_posts.should == [1, 2, 3]
163 end
164end
165
154166describe Post, 'validations' do
155167 def valid_post_attributes
156168 {
toggle raw diff

spec/views/posts/show.html.erb_spec.rb

 
2222 :published_at => 1.year.ago,
2323 :slug => 'a-post',
2424 :approved_comments => [mock_comment],
25 :tags => [mock_tag]
25 :tags => [mock_tag],
26 :related_posts => [mock_model(Post,
27 :title => 'Hello',
28 :slug => 'hello',
29 :published_at => 1.year.ago.utc
30 )]
2631 )
2732 assigns[:post] = @post
2833 assigns[:comment] = Comment.new
toggle raw diff