搜索不重定向

时间:2013-03-07 16:36:43

标签: ruby-on-rails ruby-on-rails-3 full-text-search

我正在尝试关注Simple Search Form。虽然看起来很琐碎但我无法让它发挥作用。我基本上有以下设置:

application.html.erb

<%= form_tag products_path, method: :get do %>
            <p>
              <%= text_field_tag :search, params[:search] %>
              <%= submit_tag "Search", title: nil %>
            </p>
        <% end %>

prodcut_controlle.rb

    def index
    @products = Product.search(params[:search])
    respond_to do |format|
      format.html
      format.json { render json: @products }
    end
  end


  def show
    @product = Product.find(params[:id])
    @cart = current_cart #Get current cart

    respond_to do |format|
      format.html
      format.json { render json: @product }
    end
  end

Product.rb *

  def self.search(search)
    if search
      find(:all, :conditions => ['title LIKE ?', "%#{search}%"])
    else
      find(:all)
    end
  end

我实际上的目标是,当用户搜索特定的product时,他们会被重定向到产品。在这种情况下,products show就是@products = Product.search(params[:search]),这就是我放{{1}}的原因。我如何实现如此基本的东西-.-

2 个答案:

答案 0 :(得分:0)

除非您的路线非常不寻常,否则在您的表单标记products_path中引用index操作而不是show操作。

执行搜索的代码应改为index,然后执行重定向到show,如果您可以确定单个产品“显示”。

对于重定向,假设您有一个搜索结果(或者为用户选择一个),您可以使用以下命令重定向到该show页面:

product = @products.first // Somehow you're choosing one of your @products here

respond_to do |format|
  format.html { redirect_to product }
  //...
end

现在,您需要处理的是另外两种情况: 1.如果没有产品怎么办? 2.如果有多个产品怎么办?

可以将索引操作作为常规搜索结果页面处理。

respond_to do |format|
  format.html do
    if @products.blank? || @products.size > 1
      render :action => "index"
    else
      redirect_to @products.first
    end
  end
  // ...
end

在一个真实的系统中,我会把整个“我有一个单一的产品”问题放到它自己的功能中,但希望这会让你朝着正确的方向前进。

==文档

Redirecting

render

答案 1 :(得分:0)

您应该执行搜索索引操作而不是显示操作。因此,将@products = Product.search(params[:search])行移至索引操作。另请注意,您的表单路径products_path正在通过索引操作提交请求。希望这有帮助