【问题标题】:Basic Search in Ruby Sinatra ActiveRecordRuby Sinatra ActiveRecord 中的基本搜索
【发布时间】:2016-01-14 16:34:16
【问题描述】:

我正在尝试为 Sinatra 上的简单产品库存应用程序创建基本搜索功能,但不知道如何使控制器和视图正确地将具有相似名称的所有产品输出到结果页面。

SearchPage.erb:

<form action="/search", method="post"> <input type="text" name="product[name]">

控制器:

post '/search' do
@Products = Product.find_by(name: params[:product][:name])
@Products = Product.all(:name.like => "%#{params[:name]}%") #found this on another question
erb :"result"
end

结果.erb

<% @Products.each do |product| %>
<%=product.name %>
<%=product.details %>

编辑:我能够使用以下代码根据建议进行搜索。谢谢!:

Search.erb 视图

<form action="/search", method="get">
<input type="text" name="search">

控制器

get '/search' do
@products = Product.all
if params[:search]
  @products = Product.search(params[:search])
else
  @products = Product.all
end
erb :'results'
end

型号

class Product < ActiveRecord::Base
def self.search(search)
where("name like ?", "%#{search}%")
end

Results.erb 视图

<% if @products.present? %>
<table>
<td>Product Name</td><td>Company</td>
<% @products.each do |product| %>
<tr><td><a href="/products/<%= product.id %>"><%=h product.name %></a>   </td>
<td><%=h product.company.name %></td>
<% end %>
<% else %>
<p>There are no Products containing the term(s) <%= params[:search] %>.</p>
<% end %>
</table>

【问题讨论】:

    标签: ruby search activerecord sinatra


    【解决方案1】:

    我注意到您正在使用 POST 方法。有一种更简单的方法可以为您的产品创建搜索功能。试试这个:

    帖子控制器:

    @products = Product.all
      if params[:search]
        @products = Product.search(params[:search]).order("created_at DESC")
      else
        @products = Product.all.order('created_at DESC')
      end
    end
    

    帖子模型(注意:如果您使用 SQLite,请将其保留为 LIKE。如果您使用 Postgres,请将 LIKE 更改为 ILIKE)

    def self.search(search)
      where('name like :pat or content like :pat', :pat => "%#{search}%")
    end
    

    搜索表单(放入您的 Result.erb 并根据需要进行编辑,但保留为 get 方法。我个人喜欢使用表单助手,但如果您愿意,您可以创建一个普通表单)

    <%= form_tag(products_path, :method => "get", id: "search-form") do %>
    <%= text_field_tag :search, params[:search], placeholder: "Search Posts" %>
    <%= submit_tag "Search" %>
    <% end %>
    

    渲染结果

    <% if @products.present? %>
      <%= render @products %>
    <% else %>
      <p>There are no posts containing the term(s) <%= params[:search] %>.</p>
    <% end %>
    

    让我知道这是否适合您。如果没有,我会尝试更多的帮助。

    【讨论】:

    • 谢谢!我将每个 do 用于结果页面而不是渲染并更新了代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2013-12-05
    • 1970-01-01
    相关资源
    最近更新 更多