Tire::Model::Persistence を使用して Elasticsearch をデータストアとして使用する方法を学習しようとしている非常に単純な rails3 アプリがありますが、検索に問題があります (検索の場合)。
これが私のモデルです:
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] %>
上記では、パラメーターなしで index メソッドを表示するだけで、問題なくレンダリングされます。if params[:q] をコメントアウトして、通常の旅行と同じようにすべての投稿を返すようにしました
http://localhost:3000/
ただし、その検索ボタンを押すとすぐに、次のエラー メッセージが表示されます: Routing Error
{:action="show", :controller="posts"} に一致するルートはありません
ビュー内の行を <%= link_to ... %> に削除すると、ビューはすべての投稿の名前と 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>
おそらく私が行っていない簡単なことがあるのですが、それを理解することはできません.現在、唯一のデータストアとしてレールでタイヤを使用するだけの優れた例がないため、これが単にあいまいな問題であるかどうかはわかりません.アクティブレコードを使用していないときに遭遇します。