I have a post model that has many tags through tagging. Tags are being handled in the posts controller:
if params[:tag] @posts = Post.tagged_with(params[:tag]).order(“created_at DESC”).page(params[:page])
I would like to display the tag name above the posts, something like “Archives for tag name”.
I’ve tried the following in the view file:
<% if params[:tag] %>
<%= params %>
<% else %>
Viewing all posts
<%end%>
That renders {“controller”=>“posts”, “action”=>“index”, “tag”=>“metrics”} in the browser. My question is how do I display only the tag name (in this case “metrics”)?
I don’t think you should be interacting with the params from the view. Your controller is passing a @posts object, so you could try to get the tags from that post, with @posts.tags. Hope this helps
Thanks for the suggestions That was my approach initially unfortunately I just don’t know how to make it work. I have tried the following:
<% if params[:tag] %>
<%= @posts.tags %> #=>undefined method `tags’ for ActiveRecord::Relation:0x007fbc36e92c68
In case relevant, the tagged_with is defined in the posts.rb:
def self.tagged_with(slug)
Tag.find_by_slug!(slug).posts
end
The problem things to be that you are accessing a param that is not present. In your posts_controller, you are changing the @posts that get passed out to the view: if you have a “tag” or “category” param, you pass a different @posts object. But neither of these are ever present for the posts index action.
Maybe you could try to think of your “Archives for tag name” in terms of simple actions and create resources dedicated to building it, perhaps starting with the idea of a tag_archive_controller and building from there.