【发布时间】:2015-06-25 16:08:10
【问题描述】:
我做了一个简单的搜索表单,基本上是在某些项目上搜索几个名字。如果可以在名称中找到搜索查询,我想在新页面上显示结果。我认为这真的很简单,只是对 Rails 不熟悉。
post_controler.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
routes.rb -
Rails.application.routes.draw do
get '/index' => 'posts#index'
resources :post, :posts
end
application.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>
index.html.erb -
<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>
post.rb
class Post < ActiveRecord::Base
def self.search(search)
where("name LIKE ?", "%#{search}%")
end
end
【问题讨论】:
-
迭代
@posts。如果您不需要它们,请不要选择所有它们,否则您将去 DB 两次。不过,在进一步深入之前,可能需要一个教程。 -
有点困惑除了
-
这有什么问题? (但你不需要
<%= ...,你只需要<% ...,否则你会得到each返回值的字符串表示,几乎肯定不是你想要的。) -
如果我希望它创建一个新页面来显示结果,我是否只需将它放在索引文件中?
-
如果您希望它出现在资源的索引页面上,可以。 (这不是“新页面”,而是您正在修改的现有页面。)
标签: ruby-on-rails ruby search