通过tagController中的tag_name过滤问题(帖子)#index传递/标记?tag_name =某事

时间:2010-05-31 19:38:29

标签: ruby-on-rails ruby search filter

我正在尝试让我的TagsController #index操作在传递搜索参数tag_name时仅显示包含某些标记的问题。我没有收到错误,因为无法使过滤器正常工作,以便在收到/tags?tag_name=something网址时,只会显示这些问题。这是设置:

class Tag < ActiveRecord::Base

  belongs_to :question

   def self.search(str)
     return [] if str.blank?
     cond_text   = str.split.map{|w| "tag_name LIKE ? "}.join(" OR ")
     cond_values = str.split.map{|w| "%#{w}%"}
     all(:order => "created_at DESC", :conditions =>  (str ? [cond_text, *cond_values] : []))
   end

end

class Question < ActiveRecord::Base
  has_many :tags, :dependent => :destroy
end
将URL发送到TagsController的

标记链接如下所示:

<%= link_to(tag_name, tags_path(:tag_name => tag_name)) %>

和输出:

/tags?tag_name=something

在我的/views/tags/index.html.erb视图中,我通过渲染部分/views/questions/_question.html.erb来调用问题。

<%= render :partial => @questions %>

当我发送带有搜索参数的URL时,没有任何反应。这是我的TagsController #index action:

def index
    @tags = Tag.search(params[:search]).paginate :page => params[:page], :per_page => 5
    @tagsearch = Tag.search(params[:search])
    @tag_counts = Tag.count(:group => :tag_name, 
       :order => 'count_all DESC', :limit => 100)

    @questions = Question.all( :order => 'created_at DESC', :limit => 50)

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @tags }
    end
  end

如何正确过滤参数/views/tags/index.html.erb的{​​{1}}文件中显示的问题?

更新:

看来我已经弄明白了。我只需要替换:

tag.tag_name

<%= link_to(tag_name, tags_path(:tag_name => tag_name)) %> x<%=tag_count%>

2 个答案:

答案 0 :(得分:0)

我认为问题是你的SQL like子句的格式,你需要格式为

%<query-here>%

答案 1 :(得分:0)

看来我已经弄明白了。我只需要替换:

<%= link_to(tag_name, tags_path(:tag_name => tag_name)) %> x<%=tag_count%>

<%= link_to(tag_name, tags_path(:search => tag_name)) %> x<%=tag_count%>