我正在尝试Article在Rails 3应用程序中为模型添加"标签" .
我想知道是否有一个gem或插件添加了模型中的"标记"功能以及视图的自动完成帮助程序.
我发现acts_as_taggable但是我不确定这是不是我应该使用的.有更新的东西吗?我从2007年google acts_as_taggable获得了结果
我试图破坏给定代码中的标签,但它不起作用.如何实现?
@tag = Tag.find_by_name(params[:name])
@tag.destroy
render :update do |page|
page[:divtag].innerHTML = render :partial => "controls/tag_list"
end
Run Code Online (Sandbox Code Playgroud) 几天前我在我的ruby on rails 2.3.2上安装了Sphinx和Thinking-Sphinx,并且基本搜索效果很好.这意味着,没有任何条件.现在,我想用一些条件过滤搜索.
我有Announcement模型,索引如下:
define_index do
indexes title, :as => :title, :sortable => true
indexes description, :as => :description, :sortable => true
end
Run Code Online (Sandbox Code Playgroud)
也许我错了,但我注意到只有当我将:sortable => true语法添加到这些属性时,我才能在搜索中使用它们作为条件.否则它什么都找不到.
现在,我还使用acts_as_taggable_on插件,它生成了我的两个数据库表:标签和标签.我没有标签模型,我只是acts_as_taggable_on :tags, :categories在我的公告模型.
我现在要做的是按标签过滤.所以,我尝试添加到我的索引 has tags(:id), :as => :tag_ids没有运气,indexes tags(:id), :as => :tag_ids但也没有用.
我如何构建索引,以便我可以这样做:
Announcement.search 'some word', :conditions => {:tag_ids => some_id}
Run Code Online (Sandbox Code Playgroud)
而且,这之间的不同has和indexes
谢谢,Brian
我在轨道2.3.2上安装了Sphinx和Thinking Sphinx for ruby.
当我无条件搜索时,搜索工作正常.现在,我想做的是按标签过滤,因此,当我使用acts_as_taggable_on插件时,我的公告模型如下所示:
class Announcement < ActiveRecord::Base
acts_as_taggable_on :tags,:category
define_index do
indexes title, :as => :title, :sortable => true
indexes description, :as => :description, :sortable => true
indexes tags.name, :as => :tags
indexes category.name, :as => :category
has category(:id), :as => :category_ids
has tags(:id), :as => :tag_ids
end
Run Code Online (Sandbox Code Playgroud)
出于某种原因,当我运行以下命令时,它只会带来一个声明,这与我的期望无关.我有很多公告,所以我期待很多结果.
Announcement.search params[:announcement][:search].to_s, :with => {:tag_ids => 1}, :page => params[:page], :per_page => 10
我想有些事情是错的,并且没有正确搜索.
任何人都可以告诉我发生了什么事吗?
谢谢,Brian
我正在尝试使用ransack宝石acts_as_taggable.我有一个简单的Job模型,acts_as_taggable以默认方式配置并具有tag_list属性.
当我跑:
Job.ransack("tags_name_in"=>["eum", "sint"]).result.to_sql
Run Code Online (Sandbox Code Playgroud)
它按预期生成SQL(这很好):
"SELECT \"jobs\".* FROM \"jobs\" LEFT OUTER JOIN \"taggings\" ON \"taggings\".\"taggable_id\" = \"jobs\".\"id\" AND \"taggings\".\"context\" = 'tags' AND \"taggings\".\"taggable_type\" = 'Job' LEFT OUTER JOIN \"tags\" ON \"tags\".\"id\" = \"taggings\".\"tag_id\" WHERE \"tags\".\"name\" IN ('eum', 'sint')"
Run Code Online (Sandbox Code Playgroud)
但是,当我试图通过使用排除:
Job.ransack("tags_name_not_in"=>["eum", "sint"]).result.to_sql
Run Code Online (Sandbox Code Playgroud)
它引发了兴奋:
NoMethodError: undefined method `left' for #<ActiveRecord::Relation::QueryAttribute:0x007f851ea6bcd8>
from /Users/sashar/.rvm/gems/ruby-2.2.5/gems/ransack-1.8.2/lib/ransack/adapters/active_record/context.rb:190:in `block in build_correlated_subquery'
from /Users/sashar/.rvm/gems/ruby-2.2.5/gems/ransack-1.8.2/lib/ransack/adapters/active_record/context.rb:189:in `each'
from /Users/sashar/.rvm/gems/ruby-2.2.5/gems/ransack-1.8.2/lib/ransack/adapters/active_record/context.rb:189:in `build_correlated_subquery'
from /Users/sashar/.rvm/gems/ruby-2.2.5/gems/ransack-1.8.2/lib/ransack/adapters/active_record/ransack/nodes/condition.rb:9:in `block in arel_predicate'
from /Users/sashar/.rvm/gems/ruby-2.2.5/gems/ransack-1.8.2/lib/ransack/adapters/active_record/ransack/nodes/condition.rb:6:in `map'
from /Users/sashar/.rvm/gems/ruby-2.2.5/gems/ransack-1.8.2/lib/ransack/adapters/active_record/ransack/nodes/condition.rb:6:in `arel_predicate' …Run Code Online (Sandbox Code Playgroud) 我在rails 3应用程序中使用ActiveAdmin和acts_as_taggable,我可以将标记列表显示为编辑页面上的清单,我可以使用控制台添加标签,然后使用表单删除它们,但是它出错了如果我尝试添加标签,则保存表单
"验证失败:上下文不能为空"
我只有一个标记上下文(标签).
ActiveAdmin表单代码是:
form :html => { :multipart => true } do |f|
f.inputs "Details" do
f.input :title
f.input :itinerary, :as => :select, :collection => Itinerary.all
f.input :description
f.input :address
f.input :contact_details
f.input :url
f.input :phone
f.input :nearest_tube
f.input :timetable
f.input :price
f.input :tags, :as => :check_boxes, :multiple => true, :collection => @tags
f.input :image, :as => :file
end
f.buttons
end
Run Code Online (Sandbox Code Playgroud)
在我的模型中
class Ticket < ActiveRecord::Base
has_and_belongs_to_many :itinerary
acts_as_taggable_on :tags
has_attached_file :image, :styles => { :medium …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用acts_ as_ taggable_on并使其工作正常,但我正在寻找有关如何进行一次修改的信息.
目前,如果我输入包含空格的标签,标签将与这些空格一起保存,因此要查看具有此标签的所有记录,我有类似的内容:
http://myapp.local/tag/this%20tag%20has%20spaces
当act_ as_ taggable_on首次保存标签时,如何将标签连字符,以便标签存储为this-tag-has-spaces?
我可以如下替换值,但是如何在acts_ as_ taggable_on接管并保存标记列表之前执行此操作?
tag.downcase.gsub(/[^[:alnum:]]/,'-').gsub(/-{2,}/,'-')
谢谢
西蒙