ruby-on-rails - rails4 将搜索引擎放在主页中

标签 ruby-on-rails ruby search

按照 ransack 上的 railcasts 教程,我能够在我的帖子页面上创建搜索引擎。但是,我想在我的 Welcome#index(主)页面上实现这些相同的搜索引擎。我以同样的方式尝试过,但每当我点击搜索时,它都会返回到欢迎#index 页面而不是搜索后的页面:( 我是 ruby​​ on rails 的新手:(

这是我的帖子 Controller :

 class PostsController < ApplicationController
     before_action :set_post, only: [:show, :edit, :update, :destroy, :vote]
     skip_before_filter :verify_authenticity_token, :only => [:edit, :update, :destroy, :vote]
 # GET /posts
 # GET /posts.json
    def index
      @search = Post.search(params[:q])
      @posts = @search.result
      @posts = @search.result(:distinct => true)
      @search.build_sort if @search.sorts.empty?

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

 private
   # Use callbacks to share common setup or constraints between actions.

  def set_post
    @post = Post.find(params[:id])
  end

  # Never trust parameters from the scary internet, only allow the white list through.
  def post_params
    params.require(:post).permit(:area, :price, :people, :size, :description, :image)
  end
 end

posts index.html.erb:

<%= search_form_for @search do |f| %>
  <div class="field">
  <h1>Search</h1>
    <%= f.label :area_cont, "area" %>
    <%= f.text_field :area_cont, class: "area_search"%>
  </div>

  <div class="post_actions">
   <%= f.submit "Search", class: "btn btn-warning" %>
   <%= link_to "Clear Search", request.path, class: "btn btn-primary" %>
  </div>

 <% end %>

欢迎#index

        <p>
            <form class="navbar-search pull-left">
                <%= search_form_for @search do |f| %>
                  <div class="field">
                  <h1>Search</h1>
                    <%= f.label :area_cont, "area" %>
                    <%= f.text_field :area_cont, class: "area_search"%>
                  </div>

                  <div class="post_actions">
                  <%= f.submit %>
                  <%= link_to "Clear Search", request.path, class: "btn btn-primary" %>
                  </div>
                <% end %>
            </form>
        </p>

欢迎 Controller

class WelcomeController < ApplicationController
 def index
   @search = Post.search(params[:q])
   @posts = @search.result
   @posts = @search.result(:distinct => true)
   @search.build_sort if @search.sorts.empty?

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

我刚刚上传了与这个问题相关的部分 :( 如果需要其他部分代码,请告诉我!!谢谢!

这是我的欢迎#index.html.erb: 我已经删除了欢迎 Controller 中的内容

<div id="headerwrap">
    <div class="container">
        <div class="row centered">
            <div class="col-lg-8 col-lg-offset-2">
            <h1>search</b></h1>
            <p>
                <form class="navbar-search pull-left">
                    <%= form_tag("/posts", method: "GET") do %>
                    <%= label_tag(:q, "Search for:") %>
                    <%= text_field_tag(:q) %>
                    <%= submit_tag("Search") %>
                    <% end %>
                 </form>
            </p>
           </div>
          </div><!-- row -->
      </div><!-- container -->
     </div><!-- headerwrap -->

运行 bundle exec 之后

enter image description here

最佳答案

welcome#index 一直为您呈现,因为您永远不会告诉 Rrails 在有搜索结果时不要这样做。
因此,您共享的 WelcomeController 片段应该如下所示:

class WelcomeController < ApplicationController
 def index
   @search = Post.search(params[:q])
   @posts = @search.result
   @posts = @search.result(:distinct => true)
   @search.build_sort if @search.sorts.empty?

   if @posts.count > 0
     # If we have any matches, render the posts/index view.
     render 'posts/index'
   else
    respond_to do |format|
     format.html 
     format.json{ render json: @posts}
    end
   end
 end
end

这仍然是部分解决方案,因为您必须处理用户输入搜索字符串但没有结果的情况,但这将帮助您入门。

关于ruby-on-rails - rails4 将搜索引擎放在主页中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24988942/

相关文章:

python - 列表是否有简短的包含功能?

c - C 中链表的递归搜索函数

ruby-on-rails - 设计/Rails - 如何只允许管理员为其他人创建帐户?

javascript - 如何使用带有 websocket-rails gem 的 channel.trigger 发送 channel 消息

ruby-on-rails - 通过 attr_accessor 对模型对象进行排序

ruby - 如何有条件地将 Ruby 变量分配给对象实例

ruby - 从 rake 运行时测试失败,直接运行时通过

ruby-on-rails - spree Paypal express 失败, "Gateway Error: translation missing: en.the_totals_of_the_cart_item_amounts_do_not_match_order_amounts "

ruby-on-rails - 解包 Rails POST 参数散列并映射到带有强参数的模型属性

C++ - 通过基于元素的自定义键搜索 vector