ruby-on-rails - 使用acts_as_taggable_on 进行搜索

标签 ruby-on-rails ruby-on-rails-3 acts-as-taggable-on

我正在尝试在模型中搜索具有特定标签的所有记录。

我们尝试搜索的示例输出:

ruby-1.9.2-p0 :1 > Question.last.tags
=> [#<ActsAsTaggableOn::Tag id: 2, name: "preferences">, #<ActsAsTaggableOn::Tag id: 13, name: "travel">]

所以,Questiontags例如偏好和旅行。我尝试过:

@tags = @questions.where("tags LIKE ?", "%#{params[:tags]}%")
=> []

@tags = @questions.where("tag LIKE ?", "%#{params[:tags]}%")
=> []

@tags = @questions.where("tag_list LIKE ?", "%#{params[:tags]}%")
=> BadFieldError: Unknown column 'tag_list'

params[:tags]时如何返回顶部记录例如,是“refere”还是“ences”?

问题模型

class Question < ActiveRecord::Base
  has_many ...
  acts_as_taggable_on :tags
end

第二次尝试

我刚刚创建了一个自定义 Controller 操作来尝试按照 @Nash 的建议更改查询。我该如何纠正它?

def autocomplete_question_tags
  @tags = Question.tagged_with("%#{params[:term]}", :any => true)
  respond_to do |format|
      format.json
  end
end

在表单中输入“旅行”后:

Started GET "/answers/autocomplete_question_tags?term=travel" for 127.0.0.1 at 2011-04-16 20:37:34 -0400<br/> Processing by AnswersController#autocomplete_question_tags as JSON<br/> Parameters: {"term"=>"travel"}<br/> {"term"=>"travel", "action"=>"autocomplete_question_tags", "controller"=>"answers"}<br/> SQL (1.8ms) SHOW TABLES<br/> SQL (0.8ms) SELECT COUNT(*) AS count_id FROM (SELECT 1 FROM 'questions' WHERE (questions.id IN (SELECT taggings.taggable_id FROM taggings JOIN tags ON taggings.tag_id = tags.id AND (tags.name LIKE '%travel') WHERE taggings.taggable_type = 'Question'))) AS subquery<br/> logger.debug: 1 result in query<br/> Completed in 114ms

ActionView::MissingTemplate (Missing template answers/autocomplete_question_tags with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml, :haml], :formats=>[:json], :locale=>[:en, :en]} in view paths "/Users/san/Documents/san/apl/app/views",<br/> app/controllers/answers_controller.rb:36:in 'autocomplete_question_tags'

Rendered /Users/san/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.1/lib/action_dispatch/middleware/templates/rescues/missing_template.erb within rescues/layout (0.7ms)

最佳答案

您可以允许参数搜索标签的任何部分。

Question.tagged_with("%#{params[:tags]}%", :any => true)

关于ruby-on-rails - 使用acts_as_taggable_on 进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5685773/

相关文章:

ruby-on-rails - 开发模式下的未知警告

ruby-on-rails - 使用带有 Rails 的 IDE 会妨碍我吗?

ruby-on-rails - 我应该验证模型中的日期时间字段吗?

JavaScriptMVC 和 Ruby on Rails 集成在一个应用程序中

ruby-on-rails - rails 4 : text_field for acts_as_taggable_on not separating tags with a comma

ruby-on-rails-3 - 使用 Rails 3 和 sqlite3 在acts_as_taggable_on gem 中缺少列错误

mysql - Rails `where` 时间少于查询

ruby-on-rails - 在 docker compose 上运行时无法连接到 Rails 应用程序中的数据库

ruby-on-rails - rails 3.0 中的多个作用域

ruby-on-rails - 使用acts-as-taggable-on查找没有标签的条目