Подтвердить что ты не робот

Acts-as-taggable-on находит все теги по контексту

Итак, после поиска метки для моего приложения rails я нашел удивительный acts-as-taggable gem. Установив его и играя, я обнаружил, что он хранит все теги внутри тега db, который просто содержит Tag.name без контекста, вместо этого контекст сохраняется в: через отношение db (taggings). Для большинства целей я вижу, что это прекрасно. За исключением моего приложения, я хочу иметь возможность предлагать пользователю возможность теги на основе уже существующих тегов (например, не позволять им создавать свои собственные) и acts-as-taggable не имеет возможности искать все теги внутри одного встроенного контекста (например, если бы я хотел представить автозаполнение тега db, я бы включил все теги в моем приложении, которые 'nt, что я хочу)

Метод ниже - это то, что я только что создал, чтобы увидеть, будет ли он работать (что он делает), но я подумал, не пропал ли что-то с acts-as-taggable. Я имею в виду, что я не вижу нигде, который предлагает этот метод?

<% ActsAsTaggableOn::Tagging.find_all_by_context("tags").each do |tagging| %>
  <%= tagging.tag %>
<% end %>

Если, например, acts-as-taggable не делает этого, это лучший способ сделать это? Он чувствует себя немного неэффективным, лучше ли я делать собственный SQL-запрос вместо маршрутизации через acts-as-taggable?

Если это помогает во всех heres хвост моего журнала:

Started GET "/users" for 127.0.0.1 at 2011-01-04 14:46:20 +0000
Processing by UsersController#index as HTML
SQL (0.5ms)   SELECT name
FROM sqlite_master
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
User Load (0.1ms)  SELECT "users".* FROM "users"
ActsAsTaggableOn::Tagging Load (0.5ms)  SELECT "taggings".* FROM "taggings" WHERE ("taggings"."context" = 'languages')
ActsAsTaggableOn::Tag Load (0.1ms)  SELECT "tags".* FROM "tags" WHERE ("tags"."id" = 2) LIMIT 1
Rendered users/index.html.erb within layouts/application (10.4ms)
4b9b3361

Ответ 1

Вы также можете использовать оператор вроде следующего:

# Returns all the tags for the specified model/context with a count >= 1
@tags = YourModel.tag_counts_on(**context**)

Добавьте лимит и порядок:

# Get the top 5 tags by count
@tags = YourModel.tag_counts_on(**context**, :limit => 5, :order => "count desc")

Доступ к счетчикам с атрибутом count тегов, возвращенных из tag_counts_on

tag.count

Ответ 2

Я считаю, что есть способ: User.tag_counts_on(:tags)

=> [#<ActsAsTaggableOn::Tag id: 1, name: "foo">,
#<ActsAsTaggableOn::Tag id: 2, name: "bar">,
#<ActsAsTaggableOn::Tag id: 3, name: "sushi">,
#<ActsAsTaggableOn::Tag id: 4, name: "pizza">]