1

私はacts_as_taggable_onを使用していますが、新しい要件があります:

最終目標:ユーザーは、別のユーザーが行ったタグの選択に同意できる必要があり、タグ付けの信頼性と信頼性が向上します。

これを行うには2つの方法があります。

1) これを行う 1 つの方法は、オブジェクトに同じタグを複数回タグ付けできるようにすることです (つまり、tag_id はタグ付けコンテキスト内で一意である必要はありません)。

tagging.rb の検証を削除する方法は知っていますが、コードを変更して、複数のユーザーが同じタグでオブジェクトにタグ付けできるようにするにはどうすればよいですか? 検証を削除するのと同じくらい簡単ですか?

2.) 別の方法は、 Thumbs_up を使用してタグ付けを投票可能にすることです。これにより、ユーザーはタグ付けの決定に賛成票/反対票を投じることができます。

これらはどちらも弱いように見えるので、独自のタグ付けソリューションを展開する方向に傾いていますが、むしろ DRY を使用したいと考えています。どの方法が最適かについての洞察、またはこれを行う簡単な方法がありませんか?

4

1 に答える 1

1

実際には、acts_as_taggable_on gem がこのユースケースをサポートしています。重要なのは、タグの所有権機能を使用することです。

@owner_a.tag(@taggable_object, :with => "list,of,tags", :on => :taggable_attribute)
@owner_b.tag(@taggable_object, :with => "list,of,neat,tags", :on => :taggable_attribute)

@taggable_object.taggable_attribute(@some_user, :locations) # => [#<ActsAsTaggableOn::Tag id: 1, name: "list">...]

これにより、一意の所有者からの重複タグを含むすべてのタグのリストが得られ、各ユーザーが特定のタグでオブジェクトに 1 回タグ付けできるようになります。

以下を使用して、そのリストを各タグのカウントを持つ一意のタグのハッシュに変換します。

@taggable_object.taggable_attribute.inject(Hash.new(0)) {|h,i| h[i.name] += 1; h } # => { "list" => 2, ... "neat" => 1 }

これを使用して、ユーザーが既にオブジェクトに適用したタグを確認します。これにより、反対/賛成アイコンを表示するかどうかを決定できます。

@taggable_object.owner_tags_on(@owner_1, :taggable_attribute); # => [#<ActsAsTaggableOn::Tag id: 1, name: "list">...]

でタグ付け可能として機能する は、所有権機能を使用するときに以前のタグ リストを常に上書きすることに注意して@owner_a.tag(:taggable_object, :with => "new,tags"...)ください@taggable_object

于 2012-04-30T22:33:06.783 に答える