Как мне обновить и отобразить теги текущего пользователя, помеченные с помощью actions_as_taggable_on?

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

Страница в представлении загружает случайные фотографии и связанные с ними теги (через форму, которую можно обновить с этой страницы). Это работает, но когда я вхожу в систему с учетной записью Facebook A, он будет показывать точно такие же теги, как если бы я вхожу в учетную запись Facebook B.

Получение ошибки whiny nil с помощью этого ниже. Идентификатор называется nil, который по ошибке может быть равен 4 - если вам действительно нужен идентификатор nil, используйте object_id

Вид такой:

<%= render 'tag_form' %>

Обновлено: форма:

<%= form_for @brand, :html => {:multipart => true} do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :tag_list, "Your tags" %> <%= f.text_field :tag_list, :value => @brand.all_tags_list %>
</p>
<p><%= f.submit "Tag" %></p>
<% end %>

# <%= f.text_field :tag_list %> was changed to the one above.

Теги также вызываются на панели управления пользователя, как показано ниже (в настоящее время пусто, потому что, очевидно, я не могу обновить теги прямо сейчас):

<%= brand.taggings( :tagger_id => current_user.id, :tagger_type => 'User').collect{|tagging| tagging.tag.to_s}.join(", ") %>

Контроллер приложения, показывающий текущего пользователя

def current_user  
  @current_user ||= User.find(session[:user_id]) if session[:user_id]  
end

Контроллер бренда

helper_method :current_user 

def index
  @brands = Brand.all
  @brand = Brand.order("RANDOM()").first
end

Добавлено: Модель бренда.

attr_accessible :name, :tag_list, :current_user
acts_as_taggable_on :tags

belongs_to :user

before_save :set_tag_owner

def set_tag_owner
  set_owner_tag_list_on(@brand, :tags, self.tag_list)
  self.tag_list = nil
end

person Simpleton    schedule 03.08.2011    source источник


Ответы (2)


Только что разговаривал с вами по IRC, но можете ли вы попробовать:

‹% = Debug @ brand.tag_list%>

на ваш взгляд. У вашего пользователя нет тегов. Если вы хотите, чтобы теги для вашего пользователя, добавьте в модель пользователя файл actions_as_taggable.


Похоже, вы хотите найти теги @brand, помеченные current_user. В этом случае:

<%= debug @brand.taggings(:tagger_id => current_user.id, :tagger_type => 'User').all %> 
person Rene van Lieshout    schedule 09.08.2011
comment
Рене, твоя помощь неоценима. Моя последняя проблема в том, что условие tagger_id = ›current.user.id не работает. В настоящее время все сохраненные теги все еще отображаются. Сервер показывает ((taggings.tagger_id IS NULL AND taggings.context = 'tags'))), вероятно, поэтому. - person Simpleton; 09.08.2011
comment
В приведенном выше коде требуется .where после тегов. Я добавил это, и теперь он делает правильные вещи, когда не показывает теги, которые не являются текущим пользователем, но теперь нет тегов по той же причине, что и мой предыдущий комментарий (tagger_id равен NULL), поэтому у него нет тегов для Показать. - person Simpleton; 09.08.2011
comment
Ах, я подозреваю, что это связано с частичной формой. Текстовое поле формы загружает теги, которые были добавлены ранее, но загружает все теги, а не только для current_user. Поэтому, когда он сохраняется, он сохраняется не в current_user.id, а в NULL. Как это исправить? - person Simpleton; 09.08.2011
comment
Ах да ... он нуждался в. Где-то там. Если он показывает вам tagger_id IS NULL, это означает, что мы не можем получить доступ к current_user там. Если это частичное, и вы можете получить доступ к current_user до того, как в частичном добавлении,: locals = ›{: current_user =› current_user} к вызову render: partial - person Rene van Lieshout; 09.08.2011
comment
К сожалению, это не помогло, даже добавлен attr_accessible для: current_user, но это тоже не сработало. - person Simpleton; 09.08.2011
comment
Вы также установили current_user? - person Rene van Lieshout; 10.08.2011

Я удалил это из своей модели:

before_save :set_tag_owner

def set_tag_owner
    set_owner_tag_list_on(@clown, :tags, self.tag_list)
    self.tag_list = nil
end

Я добавил это в контроллер в действии, которое обрабатывает запросы PUT вместо запросов GET (метод обновления)

current_user.tag(@clown, :with => params[:brand][:tag_list], :on => :tags)

Теперь это работает.

person Simpleton    schedule 10.08.2011