tag_cloud 如何使用多个模型?
How to use multiple models for tag_cloud?
_tags.html.erb
#Version 1 (Just lists out habits tags)
<% tag_cloud Habit.tag_counts, %w{s m l} do |tag, css_class| %>
<%= link_to tag.name, tag_path(tag.name), class: css_class %>
<% end %>
#Version 2
<% tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class| %>
<%= link_to tag.name, { :action => :tag, :id => tag.name }, :class => css_class %>
<% end %>
我们如何才能在列出 current_user 的习惯和目标、估值和量化指标的地方得到它? f.text_field :tag_list
在这四个模型的_form中,在数据库中也是单独的表。
我还为四个模型中的每一个添加了以下代码。这是它寻找估值的方式:
帮手
module ValuationsHelper
include ActsAsTaggableOn::TagsHelper
end
控制器
class ValuationController < ApplicationController
def tag_cloud
@tags = Valuation.tag_counts_on(:tags)
end
end
以及 用户模型
User.tag_counts_on(:tags)
acts_as_tagger
acts_as_taggable
我正在使用 acts-as-taggable-on gem,这是我从 railscasts 实现的。如果您需要任何进一步的代码或解释,请告诉我 =]
在User模型中使用gem中的方法:acts_as_tagger来设置特定于用户的标签。 acts_as_taggable_on gem 文档示例:
class User < ActiveRecord::Base
acts_as_tagger
end
class Photo < ActiveRecord::Base
acts_as_taggable_on :locations
end
@some_user.tag(@some_photo, :with => "paris, normandy", :on => :locations)
@some_user.owned_taggings
@some_user.owned_tags
@some_user.tag(@some_photo, :with => "paris, normandy", :on => :locations, :skip_save => true)
在您的案例中,您需要设置一个连接 table,其中包括以下各项的 ID:习惯、目标、估值和量化,然后您应该能够创建一个变量来调用标签计数table 或个人在您的视图中为特定用户设置每个习惯、目标、估值和量化。无论哪种方式,它应该看起来像这样:
@tags = YourModel.tag_counts_on(**context**)
更新尝试
class User < ActiveRecord::Base
acts_as_tagger
end
class Habit < ActiveRecord::Base
# This goes for Valuation, Goal, and Quantified too.
acts_as_taggable_on :combine_tags
end
class CombineTag < ActiveRecord::Base
belongs_to :habit
belongs_to :goal
belongs_to :quantified
belongs_to :valuation
end
我尝试迁移这个:
class CreateCombineTags < ActiveRecord::Migration
def change
create_table :combine_tags do |t|
t.valuation_id :integer
t.goal_id :integer
t.quantified_id :integer
t.habit_id :integer
t.timestamps null: false
end
end
end
但我得到了 undefined method 'valuation_id' for #<ActiveRecord::
我不知道 has_many
和 belongs_to
是否足以加入我假设是的模型。
那我用@tags = YourModel.tag_counts_on(**context**)
做什么?语境是什么意思?这会进入 _tags.html.erb 吗?如果是这样,它看起来像这样:
<% @tags = CombineTag.tag_counts_on(**???**)
<% tag_cloud @tags.tag_counts, %w{s m l} do |tag, css_class| %>
<%= link_to tag.name, tag_path(tag.name), class: css_class %>
<% end %>
创建一个名为 Tagalicious
的模型。
既然你想把它放在边栏里,把它放在 application_controller:
before_action :tag_cloud
def tag_cloud
@tags = Tagalicious.tag_counts_on(:tags)
end
然后在助手中:
module TagaliciousHelper
include ActsAsTaggableOn::TagsHelper
end
然后在模型中:
class Tagalicious < ActiveRecord::Base
belongs_to :habit
belongs_to :goal
belongs_to :quantified
belongs_to :valuation
acts_as_taggable
end
tag_cloud:
<% tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class| %>
<%= link_to tag.name, tag_path(tag), :class => css_class %>
<% end %>
希望这会澄清一些事情。我不知道如何让你的各种模型中的这条线 <%= f.text_field :tag_list %>
指向 Tagalicious
模型。
如果您愿意,我们可以在聊天中讨论这个问题,或者针对该特定问题尝试另一个问题。
_tags.html.erb
#Version 1 (Just lists out habits tags)
<% tag_cloud Habit.tag_counts, %w{s m l} do |tag, css_class| %>
<%= link_to tag.name, tag_path(tag.name), class: css_class %>
<% end %>
#Version 2
<% tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class| %>
<%= link_to tag.name, { :action => :tag, :id => tag.name }, :class => css_class %>
<% end %>
我们如何才能在列出 current_user 的习惯和目标、估值和量化指标的地方得到它? f.text_field :tag_list
在这四个模型的_form中,在数据库中也是单独的表。
我还为四个模型中的每一个添加了以下代码。这是它寻找估值的方式:
帮手
module ValuationsHelper
include ActsAsTaggableOn::TagsHelper
end
控制器
class ValuationController < ApplicationController
def tag_cloud
@tags = Valuation.tag_counts_on(:tags)
end
end
以及 用户模型
User.tag_counts_on(:tags)
acts_as_tagger
acts_as_taggable
我正在使用 acts-as-taggable-on gem,这是我从 railscasts 实现的。如果您需要任何进一步的代码或解释,请告诉我 =]
在User模型中使用gem中的方法:acts_as_tagger来设置特定于用户的标签。 acts_as_taggable_on gem 文档示例:
class User < ActiveRecord::Base
acts_as_tagger
end
class Photo < ActiveRecord::Base
acts_as_taggable_on :locations
end
@some_user.tag(@some_photo, :with => "paris, normandy", :on => :locations)
@some_user.owned_taggings
@some_user.owned_tags
@some_user.tag(@some_photo, :with => "paris, normandy", :on => :locations, :skip_save => true)
在您的案例中,您需要设置一个连接 table,其中包括以下各项的 ID:习惯、目标、估值和量化,然后您应该能够创建一个变量来调用标签计数table 或个人在您的视图中为特定用户设置每个习惯、目标、估值和量化。无论哪种方式,它应该看起来像这样:
@tags = YourModel.tag_counts_on(**context**)
更新尝试
class User < ActiveRecord::Base
acts_as_tagger
end
class Habit < ActiveRecord::Base
# This goes for Valuation, Goal, and Quantified too.
acts_as_taggable_on :combine_tags
end
class CombineTag < ActiveRecord::Base
belongs_to :habit
belongs_to :goal
belongs_to :quantified
belongs_to :valuation
end
我尝试迁移这个:
class CreateCombineTags < ActiveRecord::Migration
def change
create_table :combine_tags do |t|
t.valuation_id :integer
t.goal_id :integer
t.quantified_id :integer
t.habit_id :integer
t.timestamps null: false
end
end
end
但我得到了 undefined method 'valuation_id' for #<ActiveRecord::
我不知道 has_many
和 belongs_to
是否足以加入我假设是的模型。
那我用@tags = YourModel.tag_counts_on(**context**)
做什么?语境是什么意思?这会进入 _tags.html.erb 吗?如果是这样,它看起来像这样:
<% @tags = CombineTag.tag_counts_on(**???**)
<% tag_cloud @tags.tag_counts, %w{s m l} do |tag, css_class| %>
<%= link_to tag.name, tag_path(tag.name), class: css_class %>
<% end %>
创建一个名为 Tagalicious
的模型。
既然你想把它放在边栏里,把它放在 application_controller:
before_action :tag_cloud
def tag_cloud
@tags = Tagalicious.tag_counts_on(:tags)
end
然后在助手中:
module TagaliciousHelper
include ActsAsTaggableOn::TagsHelper
end
然后在模型中:
class Tagalicious < ActiveRecord::Base
belongs_to :habit
belongs_to :goal
belongs_to :quantified
belongs_to :valuation
acts_as_taggable
end
tag_cloud:
<% tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class| %>
<%= link_to tag.name, tag_path(tag), :class => css_class %>
<% end %>
希望这会澄清一些事情。我不知道如何让你的各种模型中的这条线 <%= f.text_field :tag_list %>
指向 Tagalicious
模型。
如果您愿意,我们可以在聊天中讨论这个问题,或者针对该特定问题尝试另一个问题。