Ruby on rails Rails-在gem上充当标记-如何更改标记';s CSS样式取决于它';s标签计数

Ruby on rails Rails-在gem上充当标记-如何更改标记';s CSS样式取决于它';s标签计数,ruby-on-rails,ruby-on-rails-4,rubygems,hashtag,acts-as-taggable-on,Ruby On Rails,Ruby On Rails 4,Rubygems,Hashtag,Acts As Taggable On,尝试了各种不同的方法-只是似乎无法解决这个问题-你的帮助将是惊人的 当用户创建帖子时,他们可以通过。如果用户在帖子中写了2次或更多次标记,我会尝试制作该标记,然后使用与其他标记不同的CSS样式 例如,如果用户创建了三篇文章: Post1标记为“#foo#bar#foobar” Post2标记为“#foobar#占位符” Post3标记为“#foobar#foo” 我试图让所有帖子中的#foobar与其他标签(#foo#bar#占位符)具有不同的CSS样式(最好将#foobar移动为序列中的第

尝试了各种不同的方法-只是似乎无法解决这个问题-你的帮助将是惊人的

当用户创建帖子时,他们可以通过。如果用户在帖子中写了2次或更多次标记,我会尝试制作该标记,然后使用与其他标记不同的CSS样式

例如,如果用户创建了三篇文章:

  • Post1标记为“#foo#bar#foobar
  • Post2标记为“#foobar#占位符”
  • Post3标记为“#foobar#foo
我试图让所有帖子中的#foobar与其他标签(#foo#bar#占位符)具有不同的CSS样式(最好将#foobar移动为序列中的第一个标签)

new.html.erb

<%= form_for @post, html: { multipart: true } do |f| %>
 <%= f.text_field :tag_list %>
 <%= f.submit %>
<% end %>
class PostsController < ApplicationController

  def index
    if params[:tag]
     @posts = Post.tagged_with(params[:tag]).order(created_at: :desc).page(params[:page]).per_page(2)
   else 
     @posts = Post.all.order(created_at: :desc).page(params[:page]).per_page(2)
   end 
 end 
<div id="posts">
 <%= render @posts %>
</div>

<%= will_paginate @posts %>
<div class="post">
 <%= raw post.tag_list.map {|t| link_to t, tag_path(t)}.join(' ') %>
</div> 

<% post.things.order(:order).each do |thing| %>
 <%= thing.try(:text) %>
<% end %>
ActiveRecord::Schema.define(version: 20160227154831) do

 create_table "posts", force: :cascade do |t|
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
 end

create_table "taggings", force: :cascade do |t|
 t.integer  "tag_id"
 t.integer  "taggable_id"
 t.string   "taggable_type"
 t.integer  "tagger_id"
 t.string   "tagger_type"
 t.string   "context",       limit: 128
 t.datetime "created_at"
end

add_index "taggings", ["tag_id", "taggable_id", "taggable_type", "context", "tagger_id", "tagger_type"], name: "taggings_idx", unique: true
add_index "taggings", ["taggable_id", "taggable_type", "context"], name: "index_taggings_on_taggable_id_and_taggable_type_and_context"

create_table "tags", force: :cascade do |t|
 t.string  "name"
 t.integer "taggings_count", default: 0
end

add_index "tags", ["name"], name: "index_tags_on_name", unique: true

create_table "things", force: :cascade do |t|
 t.text     "text"
 t.datetime "created_at",         null: false
 t.datetime "updated_at",         null: false
end

end

首先,你需要知道之前是否使用过标签。您可以通过以下方式实现这一点:

Post.tag_counts_on(:tags).where(name: your_tag_name).present?
我建议您将此内容放到post.rb中,如:

def self.tag_used?(tag)
  self.tag_counts_on(:tags).where(name: tag.name).present?
end
(根据您想要的帖子范围(例如用户帖子)切换self)

因此,当您知道标记之前是否使用过时,您可以在_post.html.erb中添加一个特定的类(比如“used”)(我还建议您查找slim/haml标记语言):


首先,您需要知道之前是否使用过某个标记。您可以通过以下方式实现这一点:

Post.tag_counts_on(:tags).where(name: your_tag_name).present?
我建议您将此内容放到post.rb中,如:

def self.tag_used?(tag)
  self.tag_counts_on(:tags).where(name: tag.name).present?
end
(根据您想要的帖子范围(例如用户帖子)切换self)

因此,当您知道标记之前是否使用过时,您可以在_post.html.erb中添加一个特定的类(比如“used”)(我还建议您查找slim/haml标记语言):


这其实相当容易。每一个作为标记上的可标记项,都有一个标记计数

例如:

post.tags.order("taggings_count DESC")
对于文章1,您的示例将提供以下信息:

<ActsAsTaggableOn::Tag id: some_id, name: "foobar", taggings_count: 3>,  
<ActsAsTaggableOn::Tag id: some_id, name: "foo", taggings_count: 2>,
<ActsAsTaggableOn::Tag id: some_id, name: "bar", taggings_count: 1>

这其实相当容易。每一个作为标记上的可标记项,都有一个标记计数

例如:

post.tags.order("taggings_count DESC")
对于文章1,您的示例将提供以下信息:

<ActsAsTaggableOn::Tag id: some_id, name: "foobar", taggings_count: 3>,  
<ActsAsTaggableOn::Tag id: some_id, name: "foo", taggings_count: 2>,
<ActsAsTaggableOn::Tag id: some_id, name: "bar", taggings_count: 1>

非常感谢你!不幸的是,我似乎无法让这个解决方案工作…我已经将我的模式添加到SO post中-我希望这有帮助!任何反馈都会很好-再次感谢!非常感谢你!不幸的是,我似乎无法让这个解决方案工作…我已经将我的模式添加到SO post中-我希望这有帮助!任何反馈都会很好-再次感谢!