首页 > 解决方案 > 基本 Rails 搜索不呈现结果

问题描述

Rails 新手在这里。我正在尝试在我的应用程序中实现一个基本的搜索功能,但我没有任何运气让搜索结果呈现在我的部分中。我在网上查看了 rails 指南,搜索了这里的论坛,尝试了各种教程,但收效甚微。

正如我所提到的,这里是 Rails 新手,所以我确信我的代码可能非常难看。任何有关如何遵循适当礼仪的提示将不胜感激。:)

后控制器

def index
  @posts = Post.ransack(params[:query], load:true).result
end

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

def post_params
  params.require(:post).permit(:title, :body, :image, :slug)
end

def search_params
  params.permit(:search_title, :search_body)
end

路线.rb

 Rails.application.routes.draw do
 devise_for :admin_users, ActiveAdmin::Devise.config
 ActiveAdmin.routes(self)

 resources :posts

 root to: 'posts#index', as: :home

后模型

 belongs_to :category

 extend FriendlyId
  friendly_id :title, :use => [:slugged, :finders]

  validates :title, presence: true, length: { minimum: 5 }
  validates :body, presence: true
  validates :image, presence: true

 def self.search_posts(search)
  if search
   where(["title LIKE ?","%#{search}%"])
  else
   all
  end
 end
end

app/views/posts/index.html.erb

 <%= form_tag posts_path, :method => 'get' do %>
  <%= text_field_tag :search, params[:search], placeholder: "Search Posts" %>
  <%= submit_tag "Search" %>
  <% if @posts.present? %>
  <%= render 'posts/show' %>
  <% else %>
  <p>We cannot find posts containing the term(s) <%= params[:search] %>. Please try again.</p>
 <% end %>

宝石文件

gem 'activeadmin'
gem 'kaminari'
gem 'friendly_id'

我相信这就是所有相关的代码。如果您需要任何额外的东西,请告诉我。

如您所见,我通过 activeadmin 添加帖子,所以我不确定这是否对此有任何影响。一切正常,我在 url 中得到复选标记,我相信它告诉我它找到了匹配项,但我试图让它进入我在帖子视图中的部分显示,但没有任何反应。

编辑:感谢您的所有回复。我尝试了每一个但没有成功。然而,我相信问题不仅仅是简单地了解宝石的来龙去脉。我需要参加一些在线课程来加强基础知识。一旦我更好地掌握了基础知识,我将保留这篇文章并添加一个可行的解决方案来帮助其他人。再次感谢大家!:)

Edit_2:答案发布在下面。

标签: ruby-on-railsruby-on-rails-5.2

解决方案


问题是您没有传递正确的参数进行洗劫搜索。您可以尝试如下:

app/views/posts/index.html.erb

<%= search_form_for @search, url: posts_path do |f| %>
  <div class="row">
    <div class="col-12 col-md-4 col-xl-5">
      <%= f.label :posts_name_cont, 'Search by Product Name' %>
      <%= f.search_field :posts_name_cont, class: 'form-control' %>
    </div>
    <div class="col-12 col-md-3 col-xl-3 pt-4 pr-md-5 pb-2"> 
      <button class="btn btn-success btn-large mx-auto col-12 mb-2 mt-2 float-right" type="submit" name="action">Search</button>
    </div>
  </div>
<% end %>

<% if @posts.any? %>
  <% @posts.each do |p| %>
    <%= p.title %>
  <% end %>
<% end %>

后控制器

def index
  @posts = Post.all
  @search = @posts.ransack(params[:q])
  @posts = @search.result.order(:created_at)
end

您还可以在此处查看有关搜索选项的更多详细信息Ransack gem


推荐阅读