2010-06-07 4 views
1

J'ai une vue d'index qui liste toutes les étiquettes pour mes modèles d'entrée et de message. Je souhaite afficher uniquement les tags pour les entrées dans cette vue. J'utilise acts-as-taggable-on.Supprimer un type d'étiquette de la vue (implique une pagination alphabétique)

Balises contrôleur:

def index 
    @letter = params[:letter].blank? ? 'a' : params[:letter] 
    @tagged_entries = Tagging.find_all_by_taggable_type('Entry').map(&:taggable) 
    @title = "Tags" 
    if params[:letter] == '#' 
    @data = Tag.find(@tagged_entries, :conditions => ["name REGEXP ?", 
     "^[^a-z]"], :order => 'name', :select => "id, name") 
    else 
    @data = Tag.find(@tagged_entries, :conditions => ["name LIKE ?", 
      "#{params[:letter]}%"], :order => 'name', :select => "id, name") 
    end 
    respond_to do |format| 
    flash[:notice] = 'We are currently in Beta. You may experience errors.' 
    format.html 
    end 
end 

balises index #:

<% @data.each do |t| %> 
    <div class="tag"><%= link_to t.name.titleize, tag_path(t) %></div> 
<% end %> 

Je veux montrer que le type tagable 'entrée' dans la vue. Des idées? Merci d'avoir lu ma question.

EDIT SECOND:

Balises contrôleur:

def index 
    @title = "Tags" 
    @letter = params[:letter].blank? ? 'a' : params[:letter] 

    @taggings = Tagging.find_all_by_taggable_type('Entry', :include => [:tag, :taggable]) 
    @tags = @taggings.map(&:tag).sort_by(&:name).uniq 
    @tagged_entries = @taggings.map(&:taggable)#.sort_by(&:id)#or whatever 

    if params[:letter] == '#' 
    @data = Tag.find(@tags, :conditions => ["name REGEXP ?", 
     "^[^a-z]"], :order => 'name', :select => "id, name") 
    else 
    @data = Tag.find(@tags, :conditions => ["name LIKE ?", 
       "#{params[:letter]}%"], :order => 'name', :select => "id, name") 
    end 

    respond_to do |format| 
    format.html 
    end 
end 
index

tags de #:

<% @data.each do |t| %> 
    <div class="tag"><%= link_to t.name.titleize, tag_path(t) %></div> 
<% end %> 

code Max Williams fonctionne, sauf lorsque je clique sur mes liens de pagination alphabétique. L'erreur que je reçois [après avoir cliqué sur le lien G du alphabétique pagination] se lit comme suit:

Couldn't find all Tags with IDs (77,130,115,...) AND (name LIKE 'G%') (found 9 results, but was looking for 129) 

Quelqu'un peut-il me diriger dans la bonne direction?

Répondre

2
@taggings = Tagging.find_all_by_taggable_type('Entry', :include => [:tag, :taggable]) 
    @tags = @taggings.map(&:tag).sort_by(&:name) 
    @tagged_entries = @taggings.map(&:taggable).sort_by(&:id)#or whatever 
+0

Pour la plupart cela fonctionne. J'ai expliqué le comportement exact en détail ci-dessus. Je vous remercie beaucoup pour votre aide! – BasicObject