seltsames Verhalten mit acts_as_taggable_on
-
25-09-2019 - |
Frage
Bearbeiten
Die Anweisungen auf Github weisen Sie die Gemcutter Quelle für den Edelstein zu verwenden. Derzeit installiert diese Version 2.0.5, die den Fehler enthält ich unten beschrieben habe.
@Vlad Zloteanu zeigt, dass 1.0.5 nicht den Fehler enthalten. Ich habe auch mit 1.0.5 und bestätigen versucht, dass der Fehler macht nicht gibt es in dieser Version. Menschen mit acts_as_taggable_on kämpfen und im Besitz Tags auf 2.x, Rollbacks und Warten auf eine fix ..
Aus irgendeinem Grund Tags sind nicht auf einem markierbare Objekt zeigt, wenn ein Tagger angegeben ist.
Testen der Post
class Post < ActiveRecord::Base
acts_as_taggable_on :tags
belongs_to :user
end
>> p = Post.first
=> #<Post id: 1, ...>
>> p.is_taggable?
=> true
>> p.tag_list = "foo, bar"
=> "foo, bar"
>> p.save
=> true
>> p.tags
=> [#<Tag id: 1, name: "foo">, #<Tag id: 2, name: "bar">]
Testen der Benutzer
class User < ActiveRecord::Base
acts_as_tagger
has_many :posts
end
>> u = User.first
=> #<User id: 1, ...>
>> u.is_tagger?
=> true
>> u.tag(p, :with => "hello, world", :on => :tags)
=> true
>> u.owned_tags
=> [#<Tag id: 3, name: "hello">, #<Tag id: 4, name: "world">]
Refresh der Post
>> p = Post.first
=> #<Post id: 1 ...>
>> p.tags
=> [#<Tag id: 2, name: "bar">, #<Tag id: 1, name: "foo">]
Wo ist die hello
und world
-Tags? Wie durch ein Wunder, wenn ich direkt auf die Datenbank zu Satz tagger_id
und tagger_type
zu NULL
, die beiden fehlenden Tags angezeigt wird ändern. Ich vermute, es ist etwas falsch mit meinem User
Modell? Was soll das?
EDIT
Noch seltsamer:
Post.tagged_with("hello")
#=> #<Post id: 1, ...>
Es findet an den Pfosten So kann es Tag aus der Datenbank lesen! Wie kommt es nicht mit Post#tags
oder Post#tag_list
angezeigt?
Lösung
neu erstellt ich Ihr Projekt, indem genau die gleichen Klassen.
Das ist mein Ergebnis:
>> Post.create
=> #<Post id: 1, created_at: "2010-05-18 09:16:36", updated_at: "2010-05-18 09:16:36">
>> p = Post.first
=> #<Post id: 1, created_at: "2010-05-18 09:16:36", updated_at: "2010-05-18 09:16:36">
>> p.is_taggable?
=> true
>> p.tag_list = "foo, bar"
=> "foo, bar"
>> p.save
=> true
>> p.tags
=> [#<Tag id: 1, name: "foo">, #<Tag id: 2, name: "bar">]
>> User.create
=> #<User id: 1, created_at: "2010-05-18 09:17:02", updated_at: "2010-05-18 09:17:02">
>> u = User.first
=> #<User id: 1, created_at: "2010-05-18 09:17:02", updated_at: "2010-05-18 09:17:02">
>> u.is_tagger?
=> true
>> u.tag(p, :with => "hello, world", :on => :tags)
=> true
>> u.owned_tags
=> [#<Tag id: 3, name: "hello">, #<Tag id: 4, name: "world">]
>> p = Post.first
=> #<Post id: 1, created_at: "2010-05-18 09:16:36", updated_at: "2010-05-18 09:16:36">
>> p.tags
=> [#<Tag id: 1, name: "foo">, #<Tag id: 2, name: "bar">, #<Tag id: 3, name: "hello">, #<Tag id: 4, name: "world">]
Daher kann ich Ihre Fehler nicht wiederholen. Ich habe es versucht, sowohl mit MySQL und SQLite.
Dies ist aus meiner env-Datei:
config.gem "mbleigh-acts-as-taggable-on", :source => "http://gems.github.com", :lib => "acts-as-taggable-on
"
Das ist mein Juwel Version:
gem list | grep taggable
mbleigh-acts-as-taggable-on (1.0.5)
Können Sie Ihre Juwel Version veröffentlichen? Können Sie versuchen, Ihr Juwel zu aktualisieren? Was DB verwenden Sie?
Wenn es nicht funktioniert, können Sie auch die Ausgabe von tail -f log/development.log
posten?
EDIT: Ich bin mit Rails 2.3.5
Andere Tipps
mbleigh freigegeben ein, dass die Lösung dieses Problems zu begehen. Erhalten alle Tags können Sie verwenden owner_tags_on:
p = Post.first
p.owner_tags_on(nil, :tags )
Dies ist der commit: http://github.com/ mbleigh / Handlungen-as-markierbare-on / commit / 3d707c25d45b5cc680cf3623d15ff59856457ea9
Auf Wiedersehen, Alessandro DS