我做了一个简单的搜索表单,基本上搜索了一些项目上的几个名字。如果可以在名称中找到搜索查询,我想在新页面上显示结果。我认为这很简单,只是对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>
答案 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中更改搜索路径。