Как я могу ограничить act_as_taggable_on_stereoids по учетной записи?
-
22-09-2019 - |
Вопрос
Если мой веб-сайт логически разделен на аккаунты (например.acme.mywebsite.com, xyz.mywebsite.com), как реализовать действовать как помеченный на стероидах и имеют ли теги область действия текущей учетной записи?
Чтобы дать немного больше деталей: если я получаю доступ к acme, я не хочу видеть теги из поддомена xyz.
Я рассмотрел вариант «действовать как помечаемый», но контекст предоставляется только в том случае, если вы хотите иметь разные классы тегов для одной и той же модели.
Решение
Предполагая, что я понял ваш вопрос в том, что у вас есть несколько учетных записей, каждая из которых имеет свой собственный набор тегов, которые можно применить к любой модели в вашем приложении, которая вызывает act_as_taggable.Следующее должно делать то, что вы хотите.
Вы можете добавить следующее в контроллер приложения, чтобы сделать субдомен доступным для всех действий.
class ApplicationController < ActionController::Base
before_filter :getSubdomain
def getSubdomain
@current_subdomain.(self.request.subdomains[0])
end
end
Предполагая, что вы каким-то образом связываете тег с субдоменом в вашей базе данных, вы можете затем создать именованную область.В этом примере предполагается, что субдомен представляет собой имя пользователя, а ваша модель тегов принадлежит пользователю. Затем вы можете использовать именованную область в вашей модели тегов, чтобы выбирать только те, которые относятся к субдомену.
class Tag < ActiveRecord::Base
...
named_scope :find_by_subdomain, labmda do |subdomain|
{ :joins => "users ON users.id = tags.user_id", :conditions => ["users.name = ?", subdomain] }
end
end
Затем, чтобы получить теги в сообщениях, созданных пользователем, связанным с субдоменом:Posts.tags.find_by_subdomain(@subdomain)
Примечание:вам придется дополнить модель тегов, предоставляемую act-as-tagable-on-steroids, чтобы добавить следующее.- Столбец, связывающий каждый тег с учетной записью.- Проверка уникальности для области действия учетной записи.Разрешение нескольким учетным записям иметь одинаковые теги.
Другие советы
Если учетная запись является для вас моделью, вы можете установить учетную запись помеченного объекта в качестве владельца.Документация : https://github.com/mbleigh/acts-as-taggable-on#tag-ownership
А затем попросите Аккаунт пометить объект.Затем, чтобы найти все теги, вы можете попросить владельца получить все теги или теги.