如何用Datamapper和Sinatra实现长尾关键词搜索功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计374个文字,预计阅读时间需要2分钟。
我对Ruby和后端开发都是新手。尽管如此,我正在尝试创建一个简单的搜索表单。我使用Sinatra作为框架,Datamapper作为ORM。请问,做到这一点最好的方式是什么?以下是我的架构,我希望搜索。
rubySinatra 应用设置get '/' do erb :indexend
搜索表单提交处理post '/search' do query=params[:query] results=SearchService.new.search(query) erb :results, locals: { results: results }end
SearchService 类class SearchService def search(query) # 使用 Datamapper 查询数据库 Model.where('name LIKE ?', %#{query}%) endend
我对 Ruby和后端开发一般都是新手.话虽这么说,我正在尝试创建一个简单的搜索表单.我使用Sinatra作为框架,使用Datamapper作为我的ORM.做这个的最好方式是什么?下面是我的架构我希望搜索操作同时搜索磁贴和类别.require 'sinatra' require 'datamapper' DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/cal.db") class Event include DataMapper::Resource property :id, Serial property :title, String property :text, Text property :contact_name, String property :contact_email, String property :location, String property :event_start_time, String property :event_end_time, String property :category, String property :created_at, DateTime property :approved, Boolean, :default => false end DataMapper.auto_upgrade! post '/search' do @results = Event.all erb :layout end
============
layout.erb
<form action="/search" method="post"> <input type="text" name="query"/><br /> <input type="submit" /> </form> <% if @results %> <table> <%@results.each do |r|%> <tr valign="top"> <td><%=r.title%></td> </tr> <%end%> </table> <% end %> 最基本的搜索查询可能是这样的:
@events = Event.all(:title.like => "%#{params[:query]}%") | Event.all(:category.like => "%#{params[:query]}%")
本文共计374个文字,预计阅读时间需要2分钟。
我对Ruby和后端开发都是新手。尽管如此,我正在尝试创建一个简单的搜索表单。我使用Sinatra作为框架,Datamapper作为ORM。请问,做到这一点最好的方式是什么?以下是我的架构,我希望搜索。
rubySinatra 应用设置get '/' do erb :indexend
搜索表单提交处理post '/search' do query=params[:query] results=SearchService.new.search(query) erb :results, locals: { results: results }end
SearchService 类class SearchService def search(query) # 使用 Datamapper 查询数据库 Model.where('name LIKE ?', %#{query}%) endend
我对 Ruby和后端开发一般都是新手.话虽这么说,我正在尝试创建一个简单的搜索表单.我使用Sinatra作为框架,使用Datamapper作为我的ORM.做这个的最好方式是什么?下面是我的架构我希望搜索操作同时搜索磁贴和类别.require 'sinatra' require 'datamapper' DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/cal.db") class Event include DataMapper::Resource property :id, Serial property :title, String property :text, Text property :contact_name, String property :contact_email, String property :location, String property :event_start_time, String property :event_end_time, String property :category, String property :created_at, DateTime property :approved, Boolean, :default => false end DataMapper.auto_upgrade! post '/search' do @results = Event.all erb :layout end
============
layout.erb
<form action="/search" method="post"> <input type="text" name="query"/><br /> <input type="submit" /> </form> <% if @results %> <table> <%@results.each do |r|%> <tr valign="top"> <td><%=r.title%></td> </tr> <%end%> </table> <% end %> 最基本的搜索查询可能是这样的:
@events = Event.all(:title.like => "%#{params[:query]}%") | Event.all(:category.like => "%#{params[:query]}%")

