0

Omniauth でログインしたユーザーに属するタグをビューに表示する方法がわかりません。

ビュー内のページは、それに関連付けられたランダムな写真とタグを読み込みます (そのページから更新できるフォームを介して)。動作しますが、Facebook アカウント A でログインすると、Facebook アカウント B でログインした場合とまったく同じタグが表示されます。

以下のこれで気まぐれな nil エラーを取得する nil の呼び出された id は、誤って 4 になります -- nil の id が本当に必要な場合は、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
4

2 に答える 2

0

これをモデルから削除しました:

before_save :set_tag_owner

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

GET リクエストの代わりに PUT リクエストを処理するアクション (Update メソッド) でこれをコントローラーに追加しました。

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

それは今動作します。

于 2011-08-10T13:47:09.960 に答える
0

IRC であなたと話していたところですが、次のことを試していただけますか。

<%= デバッグ @brand.tag_list %>

あなたの見解で。ユーザーにタグがありません。ユーザーのタグが必要な場合は、ユーザーモデルにacts_as_taggableを追加します


current_user によってタグ付けされた @brand のタグを見つけたいようです。その場合:

<%= debug @brand.taggings(:tagger_id => current_user.id, :tagger_type => 'User').all %> 
于 2011-08-09T07:09:17.887 に答える