self.search body Rails
self.search body Rails
在 Rails 中,我正在尝试为 Articles 项目创建一个额外的 Search 字段,其中第二次搜索字段搜索文章 Body 和 not the Title!
看这里的项目
https://glacial-island-18918.herokuapp.com/
index.html.erb
<div id="main">
<%= form_tag articles_path, :method => 'get' do %>
<%= text_field_tag :search, params[:search], class: "form-control", placeholder: "Search Title" %><br><div>
<%= submit_tag "Search", :name => nil, class: "btn btn-success" %>
<% end %>
<%= form_tag articles_path, :method => 'get' do %>
<%= text_field_tag :body, params[:body], class: "form-control", placeholder: "Search Body" %>
<%= submit_tag "Search", :name => nil, class: "btn btn-success" %>
<% end %>
Article.rb
def self.search(query)
# where(:title, query) -> This would return an exact match of the query
where("title like ?", "%#{query}%")
end
ArticlesController.rb
def index
@articles = Article.all
@markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)
# Adding search feature for Title.
if params[:search]
@articles = Article.search(params[:search]).order("created_at DESC")
else
@articles = Article.all.order('created_at DESC')
end
end
我搜索了这些 Stack 帖子,但似乎找不到答案(我本想 post 编辑更多,但因为我的声誉很低,所以我只能 post 两个链接。 )
Search in Rails ==> 但它只讨论如何让搜索正确地针对标题工作,没有提到 body
http://railscasts.com/episodes/111-advanced-search-form/ ==> 这有点符合我的要求,但这对我来说似乎更难,而不是简单地搜索 table 中行的另一列;搜索 Body 列而不是 Title 列。
我试过向 Article.rb 模型添加不同的方法,Articles_controller.rb,但我只是在黑暗中拍摄; any suggestions Stack family?
Your help would be greatly appreciated! Thanks! =)
这不是最优雅的解决方案,但这里有一个简单的方法。
首先,更改您的视图以对标题和 body 搜索使用不同的键(title_search
用于标题,body_search
用于 body):
<div id="main">
<%= form_tag articles_path, :method => 'get' do %>
<%= text_field_tag :title_search, params[:title_search], class: "form-control", placeholder: "Search Title" %><br><div>
<%= submit_tag "Search", :name => nil, class: "btn btn-success" %>
<% end %>
<%= form_tag articles_path, :method => 'get' do %>
<%= text_field_tag :body_search, params[:body_search], class: "form-control", placeholder: "Search Body" %>
<%= submit_tag "Search", :name => nil, class: "btn btn-success" %>
<% end %>
</div>
然后将控制器更改为
def index
@articles = Article.all
@markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)
if (title = params[:title_search].presence) || (summary = params[:body_search].presence)
@articles = Article.search(title: title, body: body).order("created_at DESC")
else
@articles = Article.all.order('created_at DESC')
end
end
最后,更新您的 search
方法以获取哈希值:
def self.search(query_hash)
result = all
result = result.where("title like ?", "%#{query_hash[:title]}%") if query_hash[:title]
result = result.where("body like ?", "%#{query_hash[:body]}%") if query_hash[:body]
result
end
在 Rails 中,我正在尝试为 Articles 项目创建一个额外的 Search 字段,其中第二次搜索字段搜索文章 Body 和 not the Title!
看这里的项目 https://glacial-island-18918.herokuapp.com/
index.html.erb
<div id="main">
<%= form_tag articles_path, :method => 'get' do %>
<%= text_field_tag :search, params[:search], class: "form-control", placeholder: "Search Title" %><br><div>
<%= submit_tag "Search", :name => nil, class: "btn btn-success" %>
<% end %>
<%= form_tag articles_path, :method => 'get' do %>
<%= text_field_tag :body, params[:body], class: "form-control", placeholder: "Search Body" %>
<%= submit_tag "Search", :name => nil, class: "btn btn-success" %>
<% end %>
Article.rb
def self.search(query)
# where(:title, query) -> This would return an exact match of the query
where("title like ?", "%#{query}%")
end
ArticlesController.rb
def index
@articles = Article.all
@markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)
# Adding search feature for Title.
if params[:search]
@articles = Article.search(params[:search]).order("created_at DESC")
else
@articles = Article.all.order('created_at DESC')
end
end
我搜索了这些 Stack 帖子,但似乎找不到答案(我本想 post 编辑更多,但因为我的声誉很低,所以我只能 post 两个链接。 )
Search in Rails ==> 但它只讨论如何让搜索正确地针对标题工作,没有提到 body
http://railscasts.com/episodes/111-advanced-search-form/ ==> 这有点符合我的要求,但这对我来说似乎更难,而不是简单地搜索 table 中行的另一列;搜索 Body 列而不是 Title 列。
我试过向 Article.rb 模型添加不同的方法,Articles_controller.rb,但我只是在黑暗中拍摄; any suggestions Stack family?
Your help would be greatly appreciated! Thanks! =)
这不是最优雅的解决方案,但这里有一个简单的方法。
首先,更改您的视图以对标题和 body 搜索使用不同的键(title_search
用于标题,body_search
用于 body):
<div id="main">
<%= form_tag articles_path, :method => 'get' do %>
<%= text_field_tag :title_search, params[:title_search], class: "form-control", placeholder: "Search Title" %><br><div>
<%= submit_tag "Search", :name => nil, class: "btn btn-success" %>
<% end %>
<%= form_tag articles_path, :method => 'get' do %>
<%= text_field_tag :body_search, params[:body_search], class: "form-control", placeholder: "Search Body" %>
<%= submit_tag "Search", :name => nil, class: "btn btn-success" %>
<% end %>
</div>
然后将控制器更改为
def index
@articles = Article.all
@markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)
if (title = params[:title_search].presence) || (summary = params[:body_search].presence)
@articles = Article.search(title: title, body: body).order("created_at DESC")
else
@articles = Article.all.order('created_at DESC')
end
end
最后,更新您的 search
方法以获取哈希值:
def self.search(query_hash)
result = all
result = result.where("title like ?", "%#{query_hash[:title]}%") if query_hash[:title]
result = result.where("body like ?", "%#{query_hash[:body]}%") if query_hash[:body]
result
end