按照 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 之后
最佳答案
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/