【问题标题】:How do I update & display a current user's tags, tagged with acts_as_taggable_on?如何更新和显示当前用户的标签,用acts_as_taggable_on 标记?
【发布时间】:2011-08-03 21:40:50
【问题描述】:

我不确定如何在我的视图中显示属于使用 Omniauth 登录的用户的标签。

视图中的页面加载随机照片和与之关联的标签(通过可以从该页面更新的表单)。它可以工作,但是当我使用 Facebook 帐户 A 登录时,它会显示与使用 Facebook 帐户 B 登录完全相同的标签。

在下面获取 whiny 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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 tagging omniauth acts-as-taggable-on


    【解决方案1】:

    刚刚在 IRC 上与你交谈,但你能试试吗:

    在你看来。您的用户没有标签。如果您想要为您的用户添加标签,请在您的用户模型中添加acts_as_taggable


    您似乎想查找由 current_user 标记的 @brand 的标签。在这种情况下:

    <%= debug @brand.taggings(:tagger_id => current_user.id, :tagger_type => 'User').all %> 
    

    【讨论】:

    • Rene,您的帮助非常宝贵。我的最后一个问题是条件 tagger_id => current.user.id 不起作用。目前所有保存的标签仍然显示。服务器显示 ((taggings.tagger_id IS NULL AND taggings.context = 'tags'))) 这可能就是原因。
    • 您上面的代码在标记之后需要一个 .where 。我添加了它,现在它做了正确的事情,它不显示不是当前用户的标签,但现在没有标签,原因与我上面的评论相同(tagger_id 为 NULL),所以它没有标签显示。
    • 啊,我怀疑它与表单部分有关。表单文本字段会加载之前添加的标签,但它会加载所有标签,而不仅仅是 current_user。所以当它保​​存时,它不是保存到 current_user.id 而是保存到 NULL。如何解决这个问题?
    • 啊是的...它需要 .where 那里。如果它显示一个 tagger_id IS NULL 这意味着我们不能访问 current_user 那里。如果这是部分内容,并且您可以在部分内容之前访问 current_user ,请在渲染中添加 , :locals => { :current_user => current_user } :partial 调用
    • 不幸的是,这并没有帮助,甚至为 :current_user 添加了一个 attr_accessible ,但这也不起作用。
    【解决方案2】:

    我从我的模型中删除了这个:

    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)
    

    现在可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多