ruby-on-rails - 基本 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:答案发布在下面。
解决方案
问题是您没有传递正确的参数进行洗劫搜索。您可以尝试如下:
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
推荐阅读
- python - 该模型不适合 Tensorflow 和 GPU 的 Keras 错误
- bash - 如何在shell脚本中按函数对字符串数组进行排序
- javascript - 如何检索 yield 函数调用的值?
- java - Android 应用程序仅在真实设备上引发错误
- excel - 使用 vba 复制已打开的 IE 页面上的所有内容
- java - java中的@Scheduled和scheduledExecutorService.scheduleWithFixedRate
- docker - 在 dockerfile 中复制的文件:如果在特定位置,则找不到
- scala - 使用 Amazon X-Ray 配置 Scala Slick
- python - Pandas 从整个数据框中删除方括号
- google-cloud-platform - Google Cloud Platform AI Jupyter 笔记本中的内存错误