我有一个非常简单的rails3应用程序,我正在尝试使用Tire :: Model :: Persistence来学习如何使用Elasticsearch作为数据存储区,但我遇到搜索问题(你知道,对于搜索)< / p>
这是我的模特:
class Post
include Tire::Model::Persistence
property :name
property :published_on
end
这是我的路线:
Beta2::Application.routes.draw do
root :to => 'posts#index'
resources :posts
end
这是我的控制器:
class ContestsController < ApplicationController
def index
if params[:q].present?
#@posts = Post.search(params[:q], load: true)
@posts = Post.all
else
@posts = Post.all
end
respond_to do |format|
format.html # index.html.erb
format.json { render json: @posts }
end
end
...show, edit, destroy...
end
我的index.html.erb:
<h1>Listing posts</h1>
<%= form_tag posts_path, method: :get do %>
<%= label_tag :query %>
<%= text_field_tag :q, params[:q] %>
<%= submit_tag :search, name: nil %>
<% end %>
<hr>
<table>
<tr>
<th>Name</th>
<th>Published on</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @posts.each do |post| %>
<tr>
<td><%= spot.name %></td>
<td><%= post.published_on %></td>
<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Edit', edit_contest_path(post) %></td>
<td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</table>
<br />
<%= link_to 'New Post', new_post_path %>
<%= link_to 'Back', posts_path if params[:q] %>
有了上述内容,只需查看没有参数的索引方法,就可以了。我已经注释了if params [:q]以便我只返回所有帖子,就像正常旅行一样
http://localhost:3000/
然而,只要我点击该搜索按钮,我就会收到以下错误消息: 路由错误
没有路线匹配{:action =&gt;“show”,:controller =&gt;“posts”}
如果我将视图中的行删除为&lt;%= link_to ...%&gt; 然后视图呈现所有帖子的名称和published_on文本。
如果我换了控制器:
#@posts = Post.search(params[:q], load: true)
回到
@posts = Post.search(params[:q], load: true)
并删除Post.all
然后在模板中我收到以下错误:
undefined method `detect' for #<Post:0x00000003a61b40>
Extracted source (around line #21):
18: <th></th>
19: </tr>
20:
21: <% @posts.each do |post| %>
22: <tr>
23: <td><%= post.name %></td>
24: <td><%= post.published_on %></td>
我可能没有做过一件简单的事情,但我无法弄明白,目前还没有一个很好的例子,只使用轮胎和轨道作为唯一的数据存储区,所以我不知道这是不是一个模糊的不使用activerecord时人们遇到的问题。
答案 0 :(得分:0)
Post.search {query {term:name,params [:q]}}以匹配特定字段或
Post.search {query {string“#{params [:q]}”}}将任何字段与整个字符串或
匹配
Post.search {query {wildcard“#{params [:q]} *”}}将部分字符串与任何字段匹配