簡體   English   中英

使用acts_as_taggable_on進行搜索

[英]Searching with 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">]

所以, Question有偏好和旅行等tags 我試過了:

@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

第二次嘗試

我剛剛創建了一個自定義控制器操作,試圖根據@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
Processing by AnswersController#autocomplete_question_tags as JSON
Parameters: {"term"=>"travel"}
{"term"=>"travel", "action"=>"autocomplete_question_tags", "controller"=>"answers"}
SQL (1.8ms) SHOW TABLES
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
logger.debug: 1 result in query
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",
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)

接受的答案不再適用。

目前的解決方案是:

Question.tagged_with(params[:tags], wild: true, any: true)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM