Как просмотреть теги для всех пользователей в экземпляре модели? - PullRequest
0 голосов
/ 16 декабря 2010

Я использую действия как теги на.Две модели: пользователь и сообщения.

Posts belongs_to :user
User has_many :posts

Сообщения действуют как теги.Пользователи действуют как tagger

Все это просто и работает.Тем не менее, у меня есть сценарий использования, который может быть за пределами того, как работает этот плагин.

Я хочу, чтобы сообщения могли быть помечены несколькими пользователями.Когда тег создается в сообщении от пользователя, он не отображается, когда вы делаете следующее:

p = Post.first
p.tag_list # this returns []

Если вы посмотрите на генерируемый SQL, он выберет записи, где «tagger_id» равен NULL.Tagger_id - это, конечно, user_id в этом случае и очень не NULL.

Однако, если вы вернетесь к нему, вы можете получить то, что хотите.

p = Post.find(1) # get a post to work with
p.tags_from(p.user) # returns an array of the tags: ['cats','dogs','wildebeasts']

Thisработает.

Теперь проблема в том, что я хочу, чтобы другой пользователь мог прийти и добавить тег к сообщению.Может быть, этот пользователь подумает, что это полезно.Давайте просто предположим, что имеет смысл сделать это.Может быть модератором ... что угодно.

Учитывая вышесказанное, как я могу получить список всех тегов в данном сообщении, предполагая, что несколько пользователей добавили теги?

С благодарностью,

NJ

Ответы [ 2 ]

4 голосов
/ 19 декабря 2010

Я ничего не знаю о плагине, который вы указали, и я все еще изучаю Rails.Но я не думаю, что

p = Post.tag_list

будет тем, что вы хотите, в любом случае.Вы запрашиваете список тегов класса Post, а не taglist определенного сообщения.Например, если у пользователей есть столбцы «электронная почта» и «имя», вы также не сможете:

u = User.names
u = User.emails

Это не имеет смысла.Но вы можете сделать что-то вроде:

User.column_names
#=> ["id", "email", "hashed_password", "created_at", "updated_at"]

Потому что это метод класса.Возможно, tag_list - это метод класса, но, похоже, он используется для поиска потерянных тегов или чего-то еще из-за того, как он выглядит для null tag_givers.Не знаю, как работает ваш плагин, вот некоторые вещи, которые вы можете попробовать на макушке:

p = Post.find(1)
p.tag_list # p.column_name_of_the_column_that_holds_the_tags should work
# or, maybe pass in ALL users as an array
p.tags_from(User.all)

Дай мне знать, что они делают.

0 голосов
/ 19 декабря 2010

Может быть, я что-то упускаю, но:

p = Post.tag_list # this returns []

#should be 
#...
@post.find params[:id]
#...    
@post.tag_list

В настоящее время вы вызываете tag_list для класса записей, а не для его экземпляра.

...