首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails4将搜索引擎放在首页

rails4将搜索引擎放在首页
EN

Stack Overflow用户
提问于 2014-07-28 13:34:30
回答 2查看 109关注 0票数 2

按照ransack上的铁路广播教程,我可以在我的帖子页面上创建搜索引擎。但是,我希望在我Welcome#index (主页)页面上实现相同的搜索引擎。我也尝试过同样的方法,但是只要我点击搜索,它就会返回到welcome#index页面,而不是搜索到的帖子页面:(我是ruby on rails的新手:(

这是我的post控制器:

代码语言:javascript
复制
 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

帖子index.html.erb:

代码语言:javascript
复制
<%= 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 %>

welcome#index

代码语言:javascript
复制
        <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>

欢迎控制器

代码语言:javascript
复制
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

我刚刚上传了与这个问题相关的部分:(请让我知道其他部分的代码是必要的!!谢谢!

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

代码语言:javascript
复制
<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之后

EN

回答 2

Stack Overflow用户

发布于 2014-07-28 15:00:50

基于你的PostsController代码。你可以试试这个。

welcome#index.html.erb中的表单应该包含Q参数,例如,

代码语言:javascript
复制
<%= form_tag(search_posts_path, method: "GET") do %>
  <%= label_tag(:q, "Search for:") %>
  <%= text_field_tag(:q) %>
  <%= submit_tag("Search") %>
<% end %>

和你的欢迎控制器索引动作,可以是空的。因为表单搜索是通过post控制器的索引动作实现的。

代码语言:javascript
复制
class WelcomeController < ApplicationController
 def index
 end
end

还有其他方法可以处理这个问题,比如将posts控制器索引设置为根(或者调用主页),然后在有搜索参数时调用search方法,传递q参数以欢迎索引操作,然后将参数重定向到post操作等。

票数 0
EN

Stack Overflow用户

发布于 2014-07-28 16:23:44

welcome#index会一直为您呈现,因为当有搜索结果时,您永远不会告诉Rrails不要这样做。

因此,您共享的WelcomeController代码片段应该如下所示:

代码语言:javascript
复制
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

这仍然是一个部分解决方案,因为当用户输入搜索字符串但没有结果时,您必须处理这种情况,但这将使您开始。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24988942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档