在Tire :: Model :: Persistence上实例化一个对象

时间:2012-08-28 16:29:49

标签: ruby-on-rails-3 tire

我有一个非常简单的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时人们遇到的问题。

1 个答案:

答案 0 :(得分:0)

Post.search {query {term:name,params [:q]}}以匹配特定字段或
Post.search {query {string“#{params [:q]}”}}将任何字段与整个字符串或
匹配 Post.search {query {wildcard“#{params [:q]} *”}}将部分字符串与任何字段匹配