如何在Rails中显示我的搜索表单的结果?

时间:2015-06-25 16:08:10

标签: ruby-on-rails ruby search

我做了一个简单的搜索表单,基本上搜索了一些项目上的几个名字。如果可以在名称中找到搜索查询,我想在新页面上显示结果。我认为这很简单,只是对rails很新。

post_controler.rb -

wait

routes.rb -

class PostsController < ApplicationController
def index
    @posts = Post.all
  if params[:search]
    @posts = Post.search(params[:search]).order("created_at DESC")
  else
    @posts = Post.all.order('created_at DESC')
  end
end
end

application.html.erb -

Rails.application.routes.draw do
  get '/index' => 'posts#index'
  resources :post, :posts
end

index.html.erb -

<!DOCTYPE html>
<html>
<head>
  <title>Trial</title>
  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
  <%= stylesheet_link_tag "defaults", media: "all", "data-turbolinks-track" => true %>
  <%= csrf_meta_tags %>
</head>
<body>

<%= yield %>

</body>
</html>

post.rb

    <html>
        <body>
                <div class="input-group">
                    <%= form_tag(posts_path, :method => "get", id: "search-form") do %>
                    <%= text_field_tag :search, params[:search], placeholder: "Search Posts", class: 'form-control' %>
                <span class="input-group-btn">
                     <%= submit_tag "Search", class: 'btn btn-success' %>
                </span>
                <% end %>
                </div>
                </form>

</body>
</html>

1 个答案:

答案 0 :(得分:0)

您可以将此代码放在index.html.erb文件中。是否有搜索参数无关紧要。只需将以下代码放在表单下方即可。

<% @posts.each do |post| %>
  <p>
    <%= post.name %>
  </p> 
<% end %>

您的控制器代码没问题。但是,执行以下操作将使其高效。它将访问数据库一次。

def index
  @posts = Post.all.order('created_at DESC')
  @posts = @posts.search(params[:search]) if params[:search].present?
end

已更新,可重定向到新页面

  

post_controller.rb

def search
  @posts = Post.all.order('created_at DESC')
  @posts = @posts.search(params[:search]) if params[:search].present?
end
  

的routes.rb

resources :posts do
  member do
    post :search
  end
end
  

search.html.erb

<% @posts.each do |post| %>
  <p>
    <%= post.name %>
  </p> 
<% end %>

希望它对你有所帮助。并在index.html.erb的form_tag中更改搜索路径。